QT + C++ + 海康威视工业相机二次开发 2021-05-12

1.了解海康威视工业相机

本人学习参考的是:boss_dog的博客,里面有详细的分析相机的数据,各种相机的区别,在VS中部署SDK的环境变量以及官方例程.

1.1.下载SDK

海康威视的工业相机二次开发首先是需要在官方下载相机的SDK,下载地址_官方下载地址,根据自身的环境区下载需要的SDK,本人下载的是(机器视觉工业相机客户端MVS V3.3.1(Windows)).

下载后打开下图中的文件,是VS+C++的Demo,本人用到的是第一个demo,打开相机保存图片.

 

1.2.环境配置

PS:不管运行海康威视的哪个例程,都需要先配置下环境
在VS项目中配置opencv和mvs的动态链接库等(用到Opencv的话)
①在VS中配置Opencv
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
②在VS中配置MVS
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

环境配置完成后,将官方的demo导入到VS中基本上就能运行了.

下图就是实现基本功能的代码,在BasicDemoDlg.cpp中就是自己写的代码根据调用官方的SDK来实现基本功能.

2.在QT中实现官方demo中的功能

2.1.首先我们需要在qt中配置好实现功能的环境:

2.1.1 配置好相机SDK的环境,参考博客:大樱桃的博客_大_樱_桃_CSDN博客-Halcon,工业相机,Halcon_C#l联合编程领域博主.

先在QT中创建一个项目,将海康的MVS文件下Development文件里面的Includes以及Libraries文件复制到qt的项目文件下.

复制完成后在QT中右击项目文件,点击添加库,选择外部库,点击下一步,选择库文件,选择平台和静态链接,点下一步就行了.

             

导入库后生成的代码片段:

生成代码片段后再加入Include,相机的头文件,相机的SDK和环境就配置完成了.

INCLUDEPATH += $$PWD/Includes
DEPENDPATH += $$PWD/Includes

2.1.2 配置opencv的环境变量:在配置opencv的路上我也是经历了很多坎坷,,,查阅无数文档,大部分都是使用MinGV,可以参考博客:拜小白教你Qt5.8.0+OpenCV3.2.0配置教程(详细版)_拜小白的成长之路,告别小白-CSDN博客,但是我是先使用的VS的运行环境,然后QT在VS的运行环境下建立的,可以参考Qt5.9.6+opencv+VS2017的安装及配置_我内疚的博客-CSDN博客。反正这种配置环境的路上就是不断地查找文档,不断地更改。,慢慢摸索,,最终我在qt上配置的opencv的代码是:

INCLUDEPATH += D:\QtDemo\opencv\include
INCLUDEPATH += D:\QtDemo\opencv\include/opencv2
CONFIG(debug, debug|release): {
   
LIBS += -LD:\QtDemo\opencv/lib \
-lopencv_world440 \
-lopencv_world440d
} else:CONFIG(release, debug|release): {
   
LIBS += -LD:\QtDemo\opencv/lib \
-lopencv_world440 \
-lopencv_world440d
}

环境配置完成后,接着把相机封装好的函数体:cpp文件和头文件复制到项目文件下:MVCamera.cpp和MVCamera.h

接着又是参考:海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(二)_boss-dog的博客-CSDN博客其中的源代码,结合上官方自带的SDK,就完成了一些基本的显示相机采集的画面,保存图片,获取相机IP,软触发等功能。

3.我的源代码是:

MVCamera.h

/************************************************************************/
/* 以C++接口为基础,对常用函数进行二次封装,方便用户使用                */
/************************************************************************/
 
#ifndef _MV_CAMERA_H_
#define _MV_CAMERA_H_
 
#include "Includes/MvCameraControl.h"
#include <string.h>
 
#include"opencv2/opencv.hpp"
#include"opencv2/imgproc/types_c.h"
 
 
#ifndef MV_NULL
#define MV_NULL    0
#endif
 
class CMvCamera
{
   
public:
    CMvCamera();
    ~CMvCamera();
 
    // ch:获取SDK版本号 | en:Get SDK Version
    static int GetSDKVersion();
 
    // ch:枚举设备 | en:Enumerate Device
    static int EnumDevices(unsigned int nTLayerType, MV_CC_DEVICE_INFO_LIST* pstDevList);
 
    // ch:判断设备是否可达 | en:Is the device accessible
    static bool IsDeviceAccessible(MV_CC_DEVICE_INFO* pstDevInfo, unsigned int nAccessMode);
 
    // ch:打开设备 | en:Open Device
    int Open(MV_CC_DEVICE_INFO* pstDeviceInfo);
 
    // ch:关闭设备 | en:Close Device
    int Close();
 
    // ch:判断相机是否处于连接状态 | en:Is The Device Connected
    bool IsDeviceConnected();
 
    // ch:注册图像数据回调 | en:Register Image Data CallBack
    int RegisterImageCallBack(void(__stdcall* cbOutput)(unsigned char * pData, MV_FRAME_OUT_INFO_EX* pFrameInfo, void* pUser), void* pUser);
 
    // ch:开启抓图 | en:Start Grabbing
    int StartGrabbing();
 
    // ch:停止抓图 | en:Stop Grabbing
    int StopGrabbing();
 
    // ch:主动获取一帧图像数据 | en:Get one frame initiatively
    int GetImageBuffer(MV_FRAME_OUT* pFrame, int nMsec);
 
    // ch:主动获取一帧图像数据 | en:Get one frame initiatively
    int GetOneFrameTimeout(unsigned char* pData, unsigned int* pnDataLen, unsigned int nDataSize, MV_FRAME_OUT_INFO_EX* pFrameInfo, int nMsec);
 
    // ch:释放图像缓存 | en:Free image buffer
    int FreeImageBuffer(MV_FRAME_OUT* pFrame);
 
    // ch:显示一帧图像 | en:Display one frame image
    int DisplayOneFrame(MV_DISPLAY_FRAME_INFO* pDisplayInfo);
 
    // ch:设置SDK内部图像缓存节点个数 | en:Set the number of the internal image cache nodes in SDK
    int SetImageNodeNum(unsigned int nNum);
 
    // ch:获取设备信息 | en:Get device information
    int GetDeviceInfo(MV_CC_DEVICE_INFO* pstDevInfo);
 
    // ch:获取GEV相机的统计信息 | en:Get detect info of GEV camera
    int GetGevAllMatchInfo(MV_MATCH_INFO_NET_DETECT* pMatchInfoNetDetect);
 
    // ch:获取U3V相机的统计信息 | en:Get detect info of U3V camera
    int GetU3VAllMatchInfo(MV_MATCH_INFO_USB_DETECT* pMatchInfoUSBDetect);
 
    // ch:获取和设置Int型参数,如 Width和Height,详细内容参考SDK安装目录下的 MvCameraNode.xlsx 文件
    // en:Get Int type parameters, such as Width and Height, for details please refer to MvCameraNode.xlsx file under SDK installation directory
    int GetIntValue(IN const char* strKey, OUT unsigned int* pIntValue);
    int SetIntValue(IN const char* strKey, IN int64_t nValue);
 
    // ch:获取和设置Enum型参数,如 PixelFormat,详细内容参考SDK安装目录下的 MvCameraNode.xlsx 文件
    // en:Get Enum type parameters, such as PixelFormat, for details please refer to MvCameraNode.xlsx file under SDK installation directory
    int GetEnumValue(IN const char* strKey, OUT MVCC_ENUMVALUE *pEnumValue);
    int SetEnumValue(IN const char* strKey, IN unsigned int nValue);
    int SetEnumValueByString(IN const char* strKey, IN const char* sValue);
 
    // ch:获取和设置Float型参数,如 ExposureTime和Gain,详细内容参考SDK安装目录下的 MvCameraNode.xlsx 文件
    // en:Get Float type parameters, such as ExposureTime and Gain, for details please refer to MvCameraNode.xlsx file under SDK installation directory
    int GetFloatValue(IN const char* strKey, OUT MVCC_FLOATVALUE *pFloatValue);
    int SetFloatValue(IN const char* strKey, IN float fValue);
 
    // ch:获取和设置Bool型参数,如 ReverseX,详细内容参考SDK安装目录下的 MvCameraNode.xlsx 文件
    // en:Get Bool type parameters, such as ReverseX, for details please refer to MvCameraNode.xlsx file under SDK installation directory
    int GetBoolValue(IN const char* strKey, OUT bool *pbValue);
    int SetBoolValue(IN const char* strKey, IN bool bValue);
 
    // ch:获取和设置String型参数,如 DeviceUserID,详细内容参考SDK安装目录下的 MvCameraNode.xlsx 文件UserSetSave
    // en:Get String type parameters, such as DeviceUserID, for details please refer to MvCameraNode.xlsx file under SDK installation directory
    int GetStringValue(IN const char* strKey, MVCC_STRINGVALUE *pStringValue);
    int SetStringValue(IN const char* strKey, IN const char * strValue);
 
    // ch:执行一次Command型命令,如 UserSetSave,详细内容参考SDK安装目录下的 MvCameraNode.xlsx 文件
    // en:Execute Command once, such as UserSetSave, for details please refer to MvCameraNode.xlsx file under SDK installation directory
    int CommandExecute(IN const char* strKey);
 
    // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera)
    int GetOptimalPacketSize(unsigned int* pOptimalPacketSize);
 
    // ch:注册消息异常回调 | en:Register Message Exception CallBack
    int RegisterExceptionCallBack(void(__stdcall* cbException)(unsigned int nMsgType, void* pUser), void* pUser);
 
    // ch:注册单个事件回调 | en:Register Event CallBack
    int RegisterEventCallBack(const char* pEventName, void(__stdcall* cbEvent)(MV_EVENT_OUT_INFO * pEventInfo, void* pUser), void* pUser);
 
    // ch:强制IP | en:Force IP
    int ForceIp(unsigned int nIP, unsigned int nSubNetMask, unsigned int nDefaultGateWay);
 
    // ch:配置IP方式 | en:IP configuration method
    int SetIpConfig(unsigned int nType);
 
    // ch:设置网络传输模式 | en:Set Net Transfer Mode
    int SetNetTransMode(unsigned int nType);
 
    // ch:像素格式转换 | en:Pixel format conversion
    int ConvertPixelType(MV_CC_PIXEL_CONVERT_PARAM* pstCvtParam);
 
    // ch:保存图片 | en:save image
    int SaveImage(MV_SAVE_IMAGE_PARAM_EX* pstParam);
 
    // ch:保存图片为文件 | en:Save the image as a file
    int SaveImageToFile(MV_SAVE_IMG_TO_FILE_PARAM* pstParam);
 
    //设置是否为触发模式
    int setTriggerMode(unsigned int TriggerModeNum);
 
    //设置触发源
    int setTriggerSource(unsigned int TriggerSourceNum);
 
    //软触发
    int softTrigger();
 
    //读取buffer
    int ReadBuffer(cv::Mat& image);
 
 
private:
 
    void*               m_hDevHandle;
 
public:
    unsigned int     m_nTLayerType;
 
    unsigned char* m_pBufForSaveImage;         // 用于保存图像的缓存
    unsigned int    m_nBufSizeForSaveImage;
 
    unsigned char* m_pBufForDriver;            // 用于从驱动获取图像的缓存
    unsigned int    m_nBufSizeForDriver;
 
};
 
#endif//_MV_CAMERA_H_
mythread.h
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include "QThread"
#include "MvCamera.h"
#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
 
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
using namespace std;
using namespace cv;
 
class MyThread :public QThread

  • 15
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 47
    评论
### 回答1: 海康威视工业相机海康威视公司生产的一款专业相机产品。作为安防行业的领军企业,海康威视致力于为客户提供高品质的安全监控解决方案。海康威视工业相机是其中一款应用广泛的产品。 海康威视工业相机采用先进的图像处理技术,具备高分辨率、高灵敏度、高动态范围等优势。它可以适应各种复杂的工业环境,为客户提供精准、稳定的图像采集和分析功能。该相机可广泛应用于机器视觉、无人检测、智能制造等领域。 海康威视工业相机具有丰富的功能和特点。首先,它支持多种图像传感器,可以根据不同的应用需求选择合适的传感器。其次,它拥有多种接口,如GigE Vision、USB3.0等,方便与其它设备的连接和数据传输。此外,它还支持远程控制和管理,用户可以通过网络远程监控和配置相机参数。 总之,海康威视工业相机是一款功能强大、性能卓越的专业相机产品。它以其高质量的图像采集和先进的图像处理能力,为客户提供了可靠的解决方案。无论是在机器视觉领域还是智能制造领域,海康威视工业相机都能够发挥重要作用,为工业自动化和安全监控领域的发展做出贡献。 ### 回答2: 海康威视工业相机海康威视公司所生产的一种专业相机产品。它是一种集成了高清图像传感器、图像处理器、光学镜头等技术的设备,用于工业领域中的图像采集、检测和分析。 海康威视工业相机具有多种特点和优势。首先,它采用了先进的图像传感器技术,能够提供高清晰度、高精度的图像采集效果。其次,该相机具备强大的图像处理能力,能够对图像进行实时处理和算法运算,提取和分析有用的信息。再次,海康威视工业相机配备了高质量的光学镜头,能够增强图像的清晰度和细节,满足各种复杂环境下的应用需求。 海康威视工业相机广泛应用于工业自动化、机器视觉、产品检测、智能制造等领域。例如,在工业自动化领域,它可以用于产品的自动检测和质量控制,提高生产效率和产品质量;在机器视觉领域,它可以用于图像分析和识别,实现自动化图像处理和判别;在智能制造领域,它可以与其他设备和系统集成,实现智能化的生产流程和管理。 总的来说,海康威视工业相机是一种功能强大、应用广泛的专业相机产品,具备高清晰度、高精度的图像采集和处理能力,提供了有效的解决方案,推动了工业自动化和智能制造的发展。 ### 回答3: 海康是一家在安防领域颇有声誉的企业,海康威视是其旗下的品牌之一。海康威视工业相机是该品牌推出的一系列适用于工业应用的相机产品。 海康威视工业相机具有以下特点和优势: 首先,海康威视工业相机采用先进的图像传感器和图像处理技术,能够提供高分辨率和清晰度的图像。这使得用户能够在工业生产过程中实时观测和分析产品的质量和状态,从而帮助提高生产效率和产品质量。 其次,海康威视工业相机具有较宽的动态范围和较高的抗干扰能力,能够适应各种复杂的环境条件。无论是在光线不足的情况下还是在高速运动的物体检测中,海康威视工业相机都能够保持出色的性能。 此外,海康威视工业相机支持多种接口和通信协议,可以与不同的设备和系统进行无缝连接和集成。用户可以根据自己的需求选择合适的接口类型,方便快捷地实现相机的使用。 最后,海康威视工业相机还具备较高的稳定性和可靠性。经过严格的质量控制和测试验证,相机能够稳定运行并长时间投入使用,减少了故障和停机的可能性。 综上所述,海康威视工业相机是一种具有高质量、高性能和高稳定性的工业相机产品。广泛应用于工业自动化、机器视觉、智能制造等领域,为各种工业应用提供了可靠的视觉解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值