当前位置: 首页 > article >正文

工业相机开发操作流程

建议按照如下的流程操作相机(其中有一些步骤是可选的,已经标明):
一、载入SDK的动态链接库档MVCAMSDK.DLL。可以使用动态或者静
态加载两种方式。 
如果使用C/C++进行开发,在工程引用 CameraApi.h头文件(位于安装目录的SDK/DEMO/VC++/include中)和MVCAMSDK.lib库文件(位于安装目录的SDK文件夹中),然后就可以直接在工程中引用SDK中的接口函数了,但是MVCAMSDK.DLL必须和的应用程序放在同一目录下或者是系统的system32目录下,放置于其他目录时,必须设定系统的环境变量(PATH)。 
如果使用VB进行开发,可以通过我们VB6例程中类似的方法进行加载,直接定义SDK的接口函数并指明其引用的DLL文件即可。SDK\Demo\VB6\Module\CameraApi.bas模块囊括了所有的SDK接口,将MVCAMSDK.DLL中导出的每一个函数接口都映像
成了VB可以调用的函数。 
 如果使用Delphi进行开发,可以通过我们Delphi6例程中类似的方法进行加载,直接定义SDK的接口函数并指明其引用的DLL文件即可。SDK\Demo\Delphi6\Units\CameraApi.pas单元囊括了所有的SDK接口,将MVCAMSDK.DLL中导出的每一个函数接口都映像成了Delphi可以调用的函数。 
如果使用C#进行开发,可以通过我们C#例程中类似的方法进行加载,C#加载MVCAMSDK.DLL的过程和VB、Delphi类似,为了方便使用,我们的C# DEMO中提供了2个工程,一个是MVSDK,这个工程专门用来定义开发包数据结构和加载开发包的API函数,另一个是Basic工程,该工程中则实现了一个集预览、抓拍、相机设置为一体的例程。Basic工程通过调用MVSDK工程中的代码来间接访问MVCAMSDK.DLL。 
二、初始化SDK。完成了SDK的加载以后,在使用其他接口之前,请调用CameraSdkInit函数进行初始化。 
三、枚举设备。调用CameraEnumerateDevice函数枚举设备,获得当前连接到PC上的相机的设备列表,列表中包括设备名(可自己修改)、版本号、唯一序列号、相机型号等信息。 
四、初始化设备。根据第三步中获得的相机设备枚举信息,调用CameraInit函数初始化指定的相机,得到相机的句柄。如果需要同时打开多个相机,则利用多个相机的设备名多次调用CameraInit来获得多个相机的句柄,后续对相机的操作,都需要此时获得的相机句柄来指定操作的相机
对象。 
五、让SDK进入图像采集模式。调用CameraPlay函数,让相机进入工作模式,并且SDK开始接收来自相机的图像。 
六、抓取图像。MindVision SDK提供了两种获得图像数据的方式,这两种方式的效率都是一样的,底层都使用了零拷贝机制来提高效率,可以根据的开发习惯来选择其中一种。 
主动调用CameraGetImageBuffer来获取一帧图像数据。该函数会获得一个SDK内部用来接收图像数据的缓冲区地址,以及帧头信息。同时,该函数可以设定超时时间,在指定的时间内没有获取到图像(线程会被挂起),则返回超时。在第三步中,初始化相机以后,调用CameraSetCallbackFunction来设定一个回调函数。这种方式是被动的,只有在SDK内部接收到
有效的图像数据帧后,才会调用设定的回调函数来传递收到的图像数据帧。 
注意:也可以同时使用以上两种方式来获取图像,但是不能在CameraSetCallbackFunction设定的回调函数中来调用CameraGetImageBuffer再次获取图像,这样会产生死锁问题。 
七、处理图像。上一步获取的图像帧,是相机输出的原始格式,大多数型号相机,原始输出都是Bayer格式或者YUV格式,这些格式信息会被自动添加到帧头信息中,调用CameraImageProcess来获得图像处理的效果,如颜色增益调整、白平衡校正、饱和度、LUT变换、降噪等等,并将YUV或者Bayer格式的原始数据转换为24BIT的位图格式(RGB888)。 
八、迭加十字线、自动曝光参考窗口、白平衡参考窗口等附加内容(如果开发中,不需要迭加信息,这一步可以略过)。调用CameraImageOverlay函数,被设置为可见状态的十字线、自动曝光参考窗口、白平衡参考窗口,将被迭加到输入的图像上。CameraImageOverlay的输入必须是位图格式,我们建议在调用CameraImageProcess得到位图格式后,再调用CameraImageOverlay函数。
九、将图像保存或者显示图像(如果的开发中,对图像进行别的处理,而不需要将图像保存成文件或者进行显示,这一步可以略过)。 
如果需要保存图像到文件中,在第六步、第七步或者第八步后,调用CameraSaveImage函数来保存图片,MindVision SDK支持PNG、BMP、JPG和原始数据四种方式。如果要保存原始数据,应该在第六步以后就调用CameraSaveImage函数;如果保存成BMP、PNG、JPG格式,应该在第七步后调用CameraSaveImage数:如果保存成BMP、PNG、JPG格式的同时,需要迭加十字线和自动曝光、白平衡参考窗口的位置,那么可以在第八步后调用CameraSaveImage函数。 
如果需要显示图像,有以下两个方式:
a. 自己根据开发环境来实现图像显示,例如利用OpenGL、DirectDraw、Windows GDI等方式来实现图像的显示。 
b. 利用我们的SDK里封装好的显示接口来显示图像。在第四步中初始化相机后,调用CameraDisplayInit函数来初始化显示接口,该函数需要传入显示控件的句柄(HWND类型),只适合VC/C++、VS、VB、VB.NET、Delphi、C#等使用Windows GDI开发接口的工具,是有一定的局限性,但如果满足使用的条件,我们还是建议使用我们封装好的显示接口。 
十、在退出程序前关闭相机(反初始化,非常重要,如果直接关闭程序而不反初始化相机,程序有可能会报内存错误)。在关闭相机时,调用CameraUnInit函数。

 

相关文章:

工业相机开发操作流程

建议按照如下的流程操作相机(其中有一些步骤是可选的,已经标明): 一、载入SDK的动态链接库档MVCAMSDK.DLL。可以使用动态或者静 态加载两种方式。 如果使用C/C进行开发,在工程引用 CameraApi.h头文件(位于安装目录的SDK/DEMO/VC/include中)和…...

DeepSeek-R1 模型及GRPO算法学习

总结DeepSeek-R1 模型算法,并对其中的GRPO算法做一些学习补充。 DeepSeek-R1 论文总结 提出了通过强化学习提升大语言模型推理能力的方法,开发出 DeepSeek-R1-Zero 和 DeepSeek-R1 模型,在多个推理任务上表现出色,并开源模型推动…...

Vue 3.0打造响应式用户界面的新方式

1 简介 Vue.js 是一个用于构建用户界面的渐进式框架。Vue 3.0 是其最新版本,引入了许多新特性和改进,使得开发者能够更高效地构建响应式的Web应用程序。本文将带你深入了解如何使用Vue 3.0来打造响应式用户界面,并通过实际案例和代码示例帮助你快速上手。 2 环境搭建 要开…...

爬虫基础(二)Web网页的基本原理

一、网页的组成 网页由三部分构成:HTML、JavaScript、CSS。 (1)HTML HTML 相当于网页的骨架,它通过使用标签来定义网页内容的结构。 举个例子: 它把图片标签为img、把视频标签为video,然后组合到一个界面…...

Kotlin开发(六):Kotlin 数据类,密封类与枚举类

引言 想象一下,你是个 Kotlin 开发者,敲着代码忽然发现业务代码中需要一堆冗长的 POJO 类来传递数据。烦得很?别急,Kotlin 贴心的 数据类 能帮你自动生成 equals、hashCode,直接省时省力!再想想需要多种状…...

我的AI工具箱Tauri+Django内容生产介绍和使用

在现代内容生产环境中,高效、自动化的工具能够显著提升生产力,降低人工成本。Tauri 与 Django 结合打造的工作箱,集成了强大的 音频处理、视频剪辑、内容下载 以及 AI 文章撰写 等模块,帮助用户在多媒体内容生产的各个环节实现高效…...

openssl 生成证书 windows导入证书

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

AJAX笔记入门篇

黑马程序员视频地址: 黑马程序员前端AJAX入门到实战全套教程https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p2https://www.bilibili.com/video/BV1MN411y7pw?vd_source…...

DOM操作中childNodes与children的差异及封装方案

引言 在JavaScript的DOM操作中,childNodes和children是开发者常用的属性,但它们在浏览器中的行为差异可能导致兼容性问题。尤其是在处理空白符(如换行符\n)时,某些浏览器(如Chrome和Edge)会将空…...

数据分析系列--④RapidMiner进行关联分析(案例)

一、核心概念 1.1项集(Itemset) 1.2规则(Rule) 1.3支持度(Support) 1.3.1 支持度的定义 1.3.2 支持度的意义 1.3.3 支持度的应用 1.3.4 支持度的示例 1.3.5 支持度的调整 1.3.6 支持度与其他指标的…...

危机13小时:追踪一场GitHub投毒事件

事件概要 自北京时间 2024.12.4 晚间6点起, GitHub 上不断出现“幽灵仓库”,仓库中没有任何代码,只有诱导性的病毒文件。当天,他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒,等待不…...

LLMs之WebRAG:STORM/Co-STORM的简介、安装和使用方法、案例应用之详细攻略

LLMs之WebRAG:STORM/Co-STORM的简介、安装和使用方法、案例应用之详细攻略 目录 STORM系统简介 1、Co-STORM 2、更新新闻 STORM系统安装和使用方法 1、安装 pip安装 直接克隆GitHub仓库 2、模型和数据集 两个数据集 FreshWiki数据集 WildSeek数据集 支持…...

使用QSqlQueryModel创建交替背景色的表格模型

class UserModel(QSqlQueryModel):def __init__(self):super().__init__()self._query "SELECT name, age FROM users"self.refresh()def refresh(self):self.setQuery(self._query)# 重新定义data()方法def data(self, index, role): if role Qt.BackgroundRole…...

低代码产品插件功能一览

下图是统计的目前市面上流行的低代码、零代码产品的插件功能。 产品名称 产品类型 官方插件数量 支持拓展 官方插件功能 宜搭 零代码 3 暂不支持 云打印、CAD看图、打印表单详情 微搭 低代码 1 暂不支持 小程序 明道云 低代码 2 支持 视图、工作流节点 简道…...

buu-rip-好久不见26

简单的栈溢出,找到后面函数和输入的个数即可...

Flutter 新春第一弹,Dart 宏功能推进暂停,后续专注定制数据处理支持

在去年春节,Flutter 官方发布了宏(Macros)编程的原型支持, 同年的 5 月份在 Google I/O 发布的 Dart 3.4 宣布了宏的实验性支持,但是对于 Dart 内部来说,从启动宏编程实验开始已经过去了几年,但…...

新手项目管理的实用工具推荐

项目启动的实用工具推荐 1. MindManager MindManager 是一款功能强大且广受欢迎的思维导图工具,对于项目启动阶段的新手而言,它就像是一位贴心的 “思路梳理助手”。在项目启动初期,各种信息和想法往往杂乱无章地充斥在脑海中,而…...

2025一区新风口:小波变换+KAN!速占!

今天给大家分享一个能让审稿人眼前一亮,好发一区的idea:小波变换KAN! 一方面:KAN刚中稿ICLR25,正是风口上,与小波变换的结合还处于起步阶段,正是红利期,创新空间广阔。 另一方面&a…...

Django ORM解决Oracle表多主键的问题

现状 以Django 3.2为例 Django ORM 设计为默认使用单一主键(通常是自增的 id 字段),这一选择主要基于以下核心原因: 简化ORM设计与操作 统一访问方式外键关联简化 避免歧义冲突 主键语义明确防止隐式依赖 性能与数据库兼容 索引…...

solidity高阶 -- 线性继承

Solidity是一种面向合约的高级编程语言,用于编写智能合约。在Solidity中,多线继承是一个强大的特性,允许合约从多个父合约继承属性和方法。本文将详细介绍Solidity中的多线继承,并通过不同的实例展示其使用方法和注意事项。 在Sol…...

无公网IP 外网访问 本地部署夫人 hello-algo

hello-algo 是一个为帮助编程爱好者系统地学习数据结构和算法的开源项目。这款项目通过多种创新的方式,为学习者提供了一个直观、互动的学习平台。 本文将详细的介绍如何利用 Docker 在本地安装部署 hello-algo,并结合路由侠内网穿透实现外网访问本地部署…...

系统思考—蝴蝶效应

“个体行为的微小差异,可能在系统中引发巨大且不可预测的结果。” — 诺贝尔经济学得主托马斯谢林 我们常说,小变动带来大影响,这种现象,在复杂系统理论中被称为“蝴蝶效应”:即使极小的变化,也能在动态系…...

钉钉群机器人设置——python版本

钉钉群机器人设置——python版本 应用场景钉钉界面操作程序开发效果展示 应用场景 由于工作需要,很多项目执行程序后出现报错信息无法第一时间收到,因此实时预警对于监控程序还是有必要。(仅个人观点) 参考文档及博客&#xff1a…...

sem_wait的概念和使用案列

sem_wait 是 POSIX 标准中定义的一个用于同步的函数,它通常用于操作信号量(semaphore)。信号量是一个整数变量,可以用来控制对共享资源的访问。在多线程编程中,sem_wait 常用于实现线程间的同步。 概念 sem_wait 的基…...

深度学习在金融风控中的应用:突破传统模型的瓶颈

深度学习在金融风控中的应用:突破传统模型的瓶颈 金融风险控制(简称“风控”)是现代金融体系中至关重要的一环,关系到金融机构的稳定性、客户的安全以及整体经济的健康运行。近年来,随着深度学习的迅猛发展,传统的风控模型正面临被颠覆的挑战,新的技术手段和思维方式正…...

【Rust自学】15.0. 智能指针(序):什么是智能指针及Rust智能指针的特性

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.0.1 指针的基本概念 指针是一个变量在内存中包含的是一个地址,指向另一个数据。 Rust 中最常见的指针是引用&#xff0c…...

Spring AI 在微服务中的应用:支持分布式 AI 推理

1. 引言 在现代企业中,微服务架构 已成为开发复杂系统的主流方式,而 AI 模型推理 也越来越多地被集成到业务流程中。如何在分布式微服务架构下高效地集成 Spring AI,使多个服务可以协同完成 AI 任务,并支持分布式 AI 推理&#x…...

QT串口通信,实现单个温湿度传感器数据的采集

1、硬件设备 RS485中继器(一进二出),usb转485模块、电源等等 => 累计115元左右。 2、核心代码 #include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::...

EtherCAT主站IGH-- 21 -- IGH之fsm_reboot.h/c文件解析

EtherCAT主站IGH-- 21 -- IGH之fsm_reboot.h/c文件解析 0 预览一 该文件功能`fsm_reboot.c` 文件功能函数预览二 函数功能介绍`fsm_reboot.c` 中主要函数的作用1. `ec_fsm_reboot_init`2. `ec_fsm_reboot_clear`3. `ec_fsm_reboot_single`4. `ec_fsm_reboot_all`5. `ec_fsm_reb…...

使用 Docker + Nginx + Certbot 实现自动化管理 SSL 证书

使用 Docker Nginx Certbot 实现自动化管理 SSL 证书 在互联网安全环境日益重要的今天,为站点或应用部署 HTTPS 已经成为一种常态。然而,手动申请并续期证书既繁琐又容易出错。本文将以 Nginx Certbot 为示例,基于 Docker 容器来搭建一个…...