海康工业相机SDK二次开发(VS+QT+海康SDK+C++)

news2025/6/3 12:16:03

前言

工业相机在现代制造和工业自动化中扮演了至关重要的角色,尤其是在高精度、高速度检测中。海康威视工业相机以其性能稳定、图像质量高、兼容性强而受到广泛青睐。特别是搞机器视觉的小伙伴们跟海康打交道肯定不在少数,笔者在平常项目中跟海康相关人员对接也是比较多。

那么,本文将全面介绍如何基于海康工业相机的 SDK,使用 Visual Studio 和 Qt 构建上位机程序,逐步实现工业相机的图像采集、显示以及参数配置。

以下是巴斯勒相机开发

巴斯勒工业相机SDK二次开发(VS+QT+巴斯勒SDK+C++)-CSDN博客

一、海康工业相机简介

1. 工业相机的主要功能

  • 图像采集:捕获高速、高清的静态或动态图像。
  • 高速传输:通过 GigE 或 USB 接口将图像传输到上位机。
  • 稳定运行:设计用于工业环境,具有高可靠性。

2. 海康工业相机优势

  • 高分辨率:支持从 0.3MP 到 50MP 的分辨率。
  • 多接口:支持 USB 3.0、GigE、Camera Link 等多种接口。
  • 全面 SDK 支持:提供多平台(Windows、Linux)的 SDK,支持 C++、C#、Python 等多种语言。

3. 常见型号

包含USB以及GigE 系列:

  • MV-CA060-10GC:分辨率 0.6MP,帧率 100fps。
  • MV-CH120-20UC:分辨率 12MP,帧率 20fps。

二、海康工业相机SDK下载 

1.客户端下载

海康工业相机的sdk是跟随其上位机一起打包安装,我们只需要下载客户端安装即可。进入海康机器人官网,下载中心可以看到包括工业相机、读码器系列产品的客户端程序。我们选择下载最新4.40版本的客户端,按照默认步骤安装即可。

2.SDK浅析 

 安装完客户端后,打开安装目录。在Development文件内可以看见这几个文件夹,其中includes以及Libraries就包含了我们二次开发所需要用到的头文件、库文件以及附加依赖项。

简要说明:

Bin:已封装的可执行程序exe,包括win32、win64

Documentations:开发指南说明

DotNet:.NET Framework框架

Includes:头文件

Libraries:库文件

MVFG:采集卡

Samples:例程,包含c#、python、halcon、c++等多种语言

ThirdPartyPlatformAdapter:第三方平台

 三、项目创建与配置

开发环境

  • 操作系统:Windows
  • 开发工具:Visual Studio 2022
  • 图形界面库:Qt 5.14
  • 图像处理库:OpenCV 4.10
  • 其他:C++编程语言 

1. 新建 Qt 项目

在 Visual Studio 中创建基于 Qt 的 C++ 项目:

  1. 打开 Visual Studio,点击 新建项目
  2. 选择 Qt Widgets Application,设置项目名称和路径。

2. 添加海康 SDK以及OpenCV

(1) 添加头文件路径

在项目属性中:

  • 右键项目,选择 属性 > C/C++ > 常规 > 附加包含目录
  • 添加 SDK 的 Include 目录路径。

(2) 链接库文件

在项目属性中:

  • 进入 链接器 > 常规 > 附加库目录,添加 SDK 的 Lib 目录。
  • 链接器 > 输入 > 附加依赖项 中添加库文件:

 OpenCV的详细下载以及配置过程可以参考我这篇文章:QT+OpenCV+Zbar实现二维码识别_opencv zbar-CSDN博客文章浏览阅读705次,点赞16次,收藏17次。通过整合Qt、Zbar和OpenCV,我们实现了一个简单的二维码识别系统。OpenCV提供了图像处理和文件读取的支持,Zbar则负责解码二维码内容。这种组合方案为二维码识别提供了高效的实现途径,特别适合桌面应用和需要图像预处理的项目。t=O83A。_opencv zbar https://blog.csdn.net/weixin_44765053/article/details/143659239?spm=1001.2014.3001.5502

 四、系统实现

1.ui设计

ui界面仿照bin文件夹里面已经打包好的exe程序设计,实现相关功能。

包括:

QLabel:显示相机图像

QComboBox:显示搜索到的设备列表

QPushButton:搜索设备、开关设备、设置参数等功能

QRadioButton:切换图像采集模式

QCheckBox:软触发使能

2.主要功能实现

海康工业相机SDK主动取流流程如下所示:

详细步骤:

  1. 调用 MV_CC_Initialize() 初始化该SDK的运行环境,以便于提前申请和分配所必须的系统资源。
  2. (可选)调用 MV_CC_EnumDevices() 枚举子网内指定传输协议对应的所有设备。 可通过nTLayerType在结构 MV_CC_DEVICE_INFO() 中获取设备信息。
  3. (可选)打开指定设备前,调用 MV_CC_IsDeviceAccessible() 检查指定设备是否可访问。
  4. 调用 MV_CC_CreateHandle() 创建设备句柄。
  5. 调用 MV_CC_OpenDevice() 打开设备。
  6. (可选)执行以下一个或多个操作以获取/设置相机不同类型的参数。
    • 获取/设置Int类型节点值:调用 MV_CC_GetIntValue() / MV_CC_SetIntValue()
    • 获取/设置Float类型节点值:调用 MV_CC_GetFloatValue() / MV_CC_SetFloatValue()
    • 获取/设置Enum类型节点值:调用 MV_CC_GetEnumValue() / MV_CC_SetEnumValue()
    • 获取/设置Bool类型节点值:调用 MV_CC_GetBoolValue() / MV_CC_SetBoolValue()
    • 获取/设置String类型节点值:调用 MV_CC_GetStringValue() / MV_CC_SetStringValue()
    • 设置Command类型节点值:调用 MV_CC_SetCommandValue()
  7. 图像采集:
    • (可选)调用 MV_CC_SetImageNodeNum() 设置图像缓存节点个数。当获取的图像数超过这个设定值,最早的图像数据会被自动丢弃。
    • 调用 MV_CC_StartGrabbing() 开始取流。
    • 对于原始图像数据,可调用 MV_CC_ConvertPixelTypeEx() 转换图像的像素格式,也可调用 MV_CC_SaveImageEx3() 转换成JPEG或BMP格式的图片,并保存成图片文件。
    • 在应用程序层中重复调用 MV_CC_GetOneFrameTimeout() 来获取图片数据。
  8. 调用 MV_CC_StopGrabbing() 停止采集。
  9. 调用 MV_CC_CloseDevice() 关闭设备。
  10. 调用 MV_CC_DestroyHandle() 销毁句柄并释放资源。
  11. 调用 MV_CC_Finalize() 释放SDK资源。

①初始化SDK

 nRet = MV_CC_Initialize();
 if (MV_OK != nRet)
    {
        printf("Initialize SDK fail! nRet [0x%x]\n", nRet);
        break;
    }

②枚举设备

  // ch:枚举设备 | en:Enum device
MV_CC_DEVICE_INFO_LIST stDeviceList;
memset(&stDeviceList, 0, sizeof(MV_CC_DEVICE_INFO_LIST));
nRet = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE | MV_GENTL_CAMERALINK_DEVICE | MV_GENTL_CXP_DEVICE | MV_GENTL_XOF_DEVICE, &stDeviceList);
if (MV_OK != nRet)
    {
    printf("Enum Devices fail! nRet [0x%x]\n", nRet);
    break;
    }

if (stDeviceList.nDeviceNum > 0)
    {
        for (unsigned int i = 0; i < stDeviceList.nDeviceNum; i++)
        {
            printf("[device %d]:\n", i);
            MV_CC_DEVICE_INFO* pDeviceInfo = stDeviceList.pDeviceInfo[i];
            if (NULL == pDeviceInfo)
                {
                    break;
                } 
            PrintDeviceInfo(pDeviceInfo);            
         }  
    } 
else
    {
        printf("Find No Devices!\n");
        break;
    }

③创建设备句柄

 // ch:选择设备并创建句柄 | en:Select device and create handle
nRet = MV_CC_CreateHandle(&handle, stDeviceList.pDeviceInfo[nIndex]);
if (MV_OK != nRet)
{
    printf("Create Handle fail! nRet [0x%x]\n", nRet);
    break;
}

④打开设备

 // ch:打开设备 | en:Open device
nRet = MV_CC_OpenDevice(handle);
if (MV_OK != nRet)
{
    printf("Open Device fail! nRet [0x%x]\n", nRet);
    break;
}

⑤图像取流

// ch:开始取流 | en:Start grab image
nRet = MV_CC_StartGrabbing(handle);
if (MV_OK != nRet)
{
    printf("Start Grabbing fail! nRet [0x%x]\n", nRet);
    break;
}

五、系统效果

1.搜索设备显示在QComboBox并点击打开。

查找打开设备

2.连续、触发模式实现图像采集 

连续、触发采集

3.修改曝光、增益等出图参数

参数修改

 4.保存图片为jpg、bmp等格式

图片保存

顺带说一嘴,这个蜂蜜雀氏不错,冬天泡水喝暖暖的很贴心哈哈哈哈哈。 决非广告,但是背景太假哥给我打钱也不是不阔以!!!

六、总结 

通过本文,完成了从环境配置到功能实现的完整开发流程。在此基础上,可以扩展更多功能,如多相机支持、图像处理、结合halcon、opencv检测等。

如有问题,欢迎评论区讨论!如果本文对您有帮助,请点赞支持!

可以关注我一下子,敬请期待后续功能实现~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2395479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习|pytorch基本运算-乘除法和幂运算

【1】引言 前序学习进程中&#xff0c;已经对pytorch张量数据的生成和广播做了详细探究&#xff0c;文章链接为&#xff1a; 深度学习|pytorch基本运算-CSDN博客 深度学习|pytorch基本运算-广播失效-CSDN博客 上述探索的内容还止步于张量的加减法&#xff0c;在此基础上&am…

4.2.4 Spark SQL 数据写入模式

在本节实战中&#xff0c;我们详细探讨了Spark SQL中数据写入的四种模式&#xff1a;ErrorIfExists、Append、Overwrite和Ignore。通过具体案例&#xff0c;我们演示了如何使用mode()方法结合SaveMode枚举类来控制数据写入行为。我们首先读取了一个JSON文件生成DataFrame&#…

论文笔记: Urban Region Embedding via Multi-View Contrastive Prediction

AAAI 2024 1 INTRO 之前基于多视图的region embedding工作大多遵循相同的模式 单独的单视图表示多视图融合 但这种方法存在明显的局限性&#xff1a;忽略了不同视图之间的信息一致性 一个区域的多个视图所携带的信息是高度相关的&#xff0c;因此它们的表示应该是一致的如果能…

初学者如何微调大模型?从0到1详解

本文将手把手带你从0到1&#xff0c;详细解析初学者如何微调大模型&#xff0c;让你也能驾驭这些强大的AI工具。 1. 什么是大模型微调&#xff1f; 想象一下&#xff0c;预训练大模型就像一位博览群书但缺乏专业知识的通才。它掌握了海量的通用知识&#xff0c;但可能无法完美…

西瓜书第十一章——降维与度量学习

文章目录 降维与度量学习k近邻学习原理头歌实战-numpy实现KNNsklearn实现KNN 降维——多维缩放&#xff08;Multidimensional Scaling, MDS&#xff0c;MDS&#xff09;提出背景与原理重述1.**提出背景**2.**数学建模与原理推导**3.**关键推导步骤** Principal Component Analy…

Portainer安装指南:多节点监控的docker管理面板-家庭云计算专家

背景 Portainer 是一个轻量级且功能强大的容器管理面板&#xff0c;专为 Docker 和 Kubernetes 环境设计。它通过直观的 Web 界面简化了容器的部署、管理和监控&#xff0c;即使是非技术用户也能轻松上手。Portainer 支持多节点管理&#xff0c;允许用户从一个中央控制台管理多…

vscode实用配置

前端开发安装插件&#xff1a; 1.可以更好看的显示文件图标 2.用户快速打开文件 使用步骤&#xff1a;在html文件下右键点击 open with live server 即可 刷力扣&#xff1a; 安装这个插件 还需要安装node.js即可

React 项目中封装 Excel 导入导出组件:技术分享与实践

文章目录 前言一、为什么需要封装 Excel 组件&#xff1f;二、技术选型三、核心实现1. 安装依赖2. 封装Excel导出3. 封装导入组件 &#xff08;UploadExcel&#xff09; 总结 前言 在 React 项目中&#xff0c;处理 Excel 文件的导入和导出是常见的业务需求。无论是导出报表数…

【2025CCF中国开源大会】RISC-V 开源生态的挑战与机遇分论坛重磅来袭!共探开源芯片未来

点击蓝字 关注我们 CCF Opensource Development Committee 开源浪潮正从软件席卷硬件领域&#xff0c;RISC-V作为全球瞩目的开源芯片架构&#xff0c;正在重塑计算生态的版图&#xff01;相较于成熟的x86与ARM&#xff0c;RISC-V生态虽处爆发初期&#xff0c;却蕴藏着无限可能。…

python完成批量复制Excel文件并根据另一个Excel文件中的名称重命名

import openpyxl import shutil import os # 原始文件路径 original_file "C:/Users/Administrator/Desktop/事业联考面试名单/郑州.xlsx" # 读取包含名称的Excel文件 # 修改为您的文件名 wb openpyxl.load_workbook( "C:/Users/Administrator/Desktop/事…

Vue-2-前端框架Vue基础入门之二

文章目录 1 计算属性1.1 计算属性简介1.2 计算属性示例 2 侦听器2.1 简单的侦听器2.2 深度监听2.3 监听对象单个属性 3 vue-cli3.1 工程化的Vue项目3.2 Vue项目的运行流程 4 vue组件4.1 Vue组件的三个部分4.1.1 template4.1.2 script4.1.3 style 4.2 组件之间的关系4.2.1 使用组…

CPT208 Human-Centric Computing 人机交互 Pt.7 交互和交互界面

文章目录 1. 界面隐喻&#xff08;Interface metaphors&#xff09;1.1 界面隐喻的应用方式1.2 界面隐喻的优缺点 2. 交互类型2.1 Instructing&#xff08;指令式交互&#xff09;2.2 Conversing&#xff08;对话式交互&#xff09;2.3 Manipulating&#xff08;操作式交互&…

[网页五子棋][匹配模块]前后端交互接口(消息推送机制)、客户端开发(匹配页面、匹配功能)

让多个用户&#xff0c;在游戏大厅中能够进行匹配&#xff0c;系统会把实力相近的两个玩家凑成一桌&#xff0c;进行对战 约定前后端交互接口 消息推送机制 匹配这样的功能&#xff0c;也是依赖消息推送机制的 玩家 1 点击开始匹配按钮&#xff0c;就会告诉服务器&#xff1…

【数据分析】Matplotlib+Pandas+Seaborn绘图

【数据分析】MatplotlibPandasSeaborn绘图 &#xff08;一&#xff09;Matplotlib绘图1.1 matplotlib绘图方式1: 状态接口1.2 matplotlib绘图方式2: 面向对象1.3 通过安斯科姆数据集, 说明可视化的重要性1.4 MatPlotlib绘图-单变量-直方图1.5 MatPlotlib绘图-双变量-散点图1.6 …

NLP学习路线图(十五):TF-IDF(词频-逆文档频率)

在自然语言处理&#xff08;NLP&#xff09;的浩瀚宇宙中&#xff0c;TF-IDF&#xff08;词频-逆文档频率&#xff09; 犹如一颗恒星&#xff0c;虽古老却依然璀璨。当ChatGPT、BERT等大模型光芒四射时&#xff0c;TF-IDF作为传统方法的代表&#xff0c;其简洁性、高效性与可解…

[Redis] Redis命令在Pycharm中的使用

初次学习&#xff0c;如有错误还请指正 目录 String命令 Hash命令 List命令 set命令 SortedSet命令 连接pycharm的过程见&#xff1a;[Redis] 在Linux中安装Redis并连接桌面客户端或Pycharm-CSDN博客 redis命令的使用见&#xff1a;[Redis] Redis命令&#xff08;1&#xf…

openpnp - 给M4x0.7mm的直油嘴加油的工具选择

文章目录 openpnp - 给M4x0.7mm的直油嘴加油的工具选择概述如果换上带卡口的M4x0.7直油嘴END openpnp - 给M4x0.7mm的直油嘴加油的工具选择 概述 X导轨用了一个HG15的滑块 滑块上的注油口的黄油嘴是M4x0.7mm的直油嘴。 外表面是6边形的柱子&#xff0c;没有可以卡住加油嘴工…

EasyExcel复杂Excel导出

效果图展示 1、引入依赖 <!-- easyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.2</version> </dependency>2、实体类 import com.alibaba.excel.annotatio…

1,QT的编译教程

目录 整体流程: 1,新建project文件 2,编写源代码 3,打开QT的命令行窗口 4,生成工程文件(QT_demo.pro) 5,生成Make file 6,编译工程 7,运行编译好的可执行文件 整体流程: 1,新建project文件 新建文本文件,后缀改为.cpp 2,编写源代码

【笔记】在 MSYS2(MINGW64)中安装 Python 工具链的记录

#工作记录 &#x1f4cc; 安装背景 操作系统&#xff1a;MSYS2 MINGW64当前时间&#xff1a;2025年6月1日Python 版本&#xff1a;3.12&#xff08;默认通过 pacman 安装&#xff09;目标工具链&#xff1a; pipxnumpypipsetuptoolswheel &#x1f6e0;️ 安装过程与结果记录…