海康威视工业相机使用

news/2024/11/28 11:33:03/

需要用摄像头,而实验室只有一个海康威视的MV-CA013-20GC(另一个大恒的更难搞),拿工业相机当普通相机用是不是有点暴殄天物了。

 

1. 相机接线

工业相机一般都需要独立供电,12v接上相机的正负极,另外网口接上电脑或交换机Lan口,建议使用千兆网口,不然帧率跟不上(也可以使用网口转usb3.0).

2.客户端使用

去官网下载下面两个软件安装,一个是客户端,另一个是开发运行环境。

打开软件如图所示

软件会自动搜索可连接的设备,查找到设备后修改相机的ip,连接上相机,然后就可以调节参数了。这里如果画面很黑,首先调小相机的光圈,增大进光量,开启自动曝光与自动增益、伽马校正。如果使用的百兆网口会出现帧率低的情况,这里要么就更换千兆网口,要么将图像类型设置为mono8.

3.sdk的二次开发

进入到安装目录下有一个Development文件夹,里面有头文件和库文件以及各种语言的开发说明和demo。

这里以C++为例(VS2019)

大致流程如下,具体实现请参考文档和demo

首先新建项目,将开发需要的头文件和库文件拷出来放到项目文件中,注意库文件有32和64之分。在属性里面配置头文件和库文件。如图所示

示例代码,先捕获摄像头图像,再用opencv显示

#include "MvCameraControl.h"
#include "opencv2/opencv.hpp"#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string>using namespace std;bool printDeviceInfo(MV_CC_DEVICE_INFO* hk_device);
bool hk2cv(MV_FRAME_OUT_INFO_EX* hk_imginfo, unsigned char* data, cv::Mat &src_img);int main(int argv, char** argc) {int ret = MV_OK;void* handle = NULL;MV_CC_DEVICE_INFO_LIST hk_devices;memset(&hk_devices, 0, sizeof(MV_CC_DEVICE_INFO_LIST));ret = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &hk_devices);if (ret != MV_OK) {cout << "enum devices faild!" << endl;return -1;}if (hk_devices.nDeviceNum > 0) {MV_CC_DEVICE_INFO* hk_camera = hk_devices.pDeviceInfo[0];if (printDeviceInfo(hk_camera) == false) {return -1;}}else {cout << "no device found" << endl;return -1;}ret = MV_CC_CreateHandle(&handle, hk_devices.pDeviceInfo[0]);if (ret != MV_OK) {return -1;}ret = MV_CC_OpenDevice(handle);if (ret != MV_OK) {return -1;}ret = MV_CC_SetEnumValue(handle, "TriggerMode", 0);if (ret != MV_OK) {return -1;}MVCC_INTVALUE hk_param;memset(&hk_param, 0, sizeof(MVCC_INTVALUE));ret = MV_CC_GetIntValue(handle, "PayloadSize", &hk_param);if (ret != MV_OK) {return -1;}unsigned int payload_size = hk_param.nCurValue;// load configret = MV_CC_FeatureLoad(handle, "FeatureFile.ini");if (ret != MV_OK){cout << "loading config file faild" << endl;return -1;}// save config/* ret = MV_CC_FeatureSave(handle, "FeatureFile.ini");if (ret != MV_OK) {return -1;}*/// start grabbing imagesret = MV_CC_StartGrabbing(handle);if (ret != MV_OK) {cout << "grab image failed!" << endl;return -1;}MV_FRAME_OUT_INFO_EX hk_imginfo;memset(&hk_imginfo, 0, sizeof(MV_FRAME_OUT_INFO_EX));unsigned char* data = (unsigned char*)malloc(sizeof(unsigned char) * (payload_size));if (data == NULL) {return -1;}cv::Mat src_img;while (!(_kbhit() && _getch() == 0x1b)) {ret = MV_CC_GetOneFrameTimeout(handle, data, payload_size, &hk_imginfo, 1000);if (ret != MV_OK) {free(data);data = NULL;return -1;}if (hk2cv(&hk_imginfo, data, src_img) == false) {continue;}cv::imshow("test", src_img);cv::waitKey(30);}// stop grap imageret = MV_CC_StopGrabbing(handle);if (ret != MV_OK) {return -1;}// close deviceret = MV_CC_CloseDevice(handle);if (ret != MV_OK) {return -1;}ret = MV_CC_DestroyHandle(handle);if (ret != MV_OK) {return -1;}system("pause");return 0;
}bool printDeviceInfo(MV_CC_DEVICE_INFO* hk_device) {if (NULL == hk_device){printf("The Pointer of hk_device is NULL!\n");return false;}if (hk_device->nTLayerType == MV_GIGE_DEVICE){int nIp1 = ((hk_device->SpecialInfo.stGigEInfo.nCurrentIp & 0xff000000) >> 24);int nIp2 = ((hk_device->SpecialInfo.stGigEInfo.nCurrentIp & 0x00ff0000) >> 16);int nIp3 = ((hk_device->SpecialInfo.stGigEInfo.nCurrentIp & 0x0000ff00) >> 8);int nIp4 = (hk_device->SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff);// print current ip and user defined nameprintf("CurrentIp: %d.%d.%d.%d\n", nIp1, nIp2, nIp3, nIp4);printf("UserDefinedName: %s\n\n", hk_device->SpecialInfo.stGigEInfo.chUserDefinedName);}else if (hk_device->nTLayerType == MV_USB_DEVICE){printf("UserDefinedName: %s\n", hk_device->SpecialInfo.stUsb3VInfo.chUserDefinedName);printf("Serial Number: %s\n", hk_device->SpecialInfo.stUsb3VInfo.chSerialNumber);printf("Device Number: %d\n\n", hk_device->SpecialInfo.stUsb3VInfo.nDeviceNumber);}else{printf("Not support.\n");}return true;
}bool hk2cv(MV_FRAME_OUT_INFO_EX* hk_imginfo, unsigned char* data, cv::Mat& src_img) {cv::Mat cv_img;if (hk_imginfo->enPixelType == PixelType_Gvsp_Mono8){cv_img = cv::Mat(hk_imginfo->nHeight, hk_imginfo->nWidth, CV_8UC1, data);}else if (hk_imginfo->enPixelType == PixelType_Gvsp_RGB8_Packed){for (unsigned int j = 0; j < hk_imginfo->nHeight; j++){for (unsigned int i = 0; i < hk_imginfo->nWidth; i++){unsigned char red = data[j * (hk_imginfo->nWidth * 3) + i * 3];data[j * (hk_imginfo->nWidth * 3) + i * 3] = data[j * (hk_imginfo->nWidth * 3) + i * 3 + 2];data[j * (hk_imginfo->nWidth * 3) + i * 3 + 2] = red;}}cv_img = cv::Mat(hk_imginfo->nHeight, hk_imginfo->nWidth, CV_8UC3, data);}else{printf("unsupported pixel format\n");return false;}if (cv_img.data == NULL){return false;}cv_img.copyTo(src_img);return true;
}

因为每次断电后都要重新设置,这里我取了一个巧,先用客户端配置好参数,然后保存参数,以后每次运行只要加载参数就行了。如果运行提示没有找到dll文件,那么就是你runtime运行环境没有安装,或者没有将安装路径添加到系统环境变量。

 

正如开头所说的,只是拿来当普通摄像头用,所以代码很简单,后面有机会再深入研究。


http://www.ppmy.cn/news/243701.html

相关文章

海康威视笔试题

海康2018-2019部分笔试题整理-技术支持 2014届校园招聘--海康威视技术支持笔试A/B卷 B卷 1.如何判断在不同网络中的两台电脑是否可以通讯,用什么工具或者方法, Ping对方的IP;用路由器实现两台电脑通信。 2.请比较面向连接服务和无连接服务的异常点,TCP/UDP分别是什么服…

海康威视摄像头选型号指南

看了一个星期的摄像头&#xff0c;经过无数的踩坑和扯皮&#xff0c;看了无数的说明书和博文&#xff0c;终于从茫茫的摄像头型号中浮上岸了&#xff0c;对这个摄像头是什么玩意儿有了大致清晰的认识。我只是用来开发的&#xff0c;怎么简单怎么来&#xff0c;所以和民用的方向…

海康威视摄像头安装与配置

海康威视摄像头安装与配置 摄像头安装摄像头配置用户名与密码参考网页硬盘刻录机配置网络配置 摄像头安装 设备&#xff1a;海康威视摄像头、硬盘刻录机和内存条。 需要将硬盘刻录机拆开&#xff0c;才能安装内存条。 然后安装硬盘刻录机网线、电源线&#xff1b;安装摄像头网…

内网web页面集成海康威视网络摄像头

需求&#xff1a;公司内网的交换机&#xff08;非海康威视平台&#xff09;&#xff0c;直接用网线将摄像头接入进来&#xff0c;然后将监控的画面实时的显示在内网web页面上。 海康威视开放平台音视频集成标准协议对接 https://open.hikvision.com/docs/docId?productId612…

海康威视网络摄像机远程监控配置(DDNS)

http://wzy02.blog.163.com/blog/static/300006082013111911918426/ 海康威视网络摄像机远程监控配置 海康威视网络摄像机出厂的默认IP地址&#xff1a;为192.0.0.64。需要将IPC的IP地址设置为和电脑在同一网段。 1. 使用摄像机IP地址搜索软件&#xff1a; 1.可以使用官方提…

海康威视摄像头接入

海康威视摄像头接入H5---SRS 问题和目标解决方案方案实现方案一方案二 问题和目标 由于工作的原因需要开发海康的摄像头&#xff0c;当中遇到了在浏览器播放实时画面的问题&#xff0c;由于摄像头是rtsp格式的&#xff0c;h5原生不支持这种格式&#xff0c;网上查了很多教程大…

海康威视NVR硬盘录像机DS-7808N安装调试教程,监控系统安装教程

海康威视(Hikvision)NVR硬盘录像机安装配置教程&#xff0c;监控系统安装教程 拼多多百亿补贴上160元买了台海康威视8路硬盘录像机 DS-7808N-E1 来换掉旧的&#xff0c;顺便写个监控安装的教程。 准备工作 安装一套监控系统所需要的基本东西有&#xff1a; NVR&#xff08;…

安装HikVision(海康威视)网络摄像头

手边有四个基于海康威视摄像头在局域网连入局域网。使用浏览器访问。那么如何在局域网发现设备并正确配置它们相应的IP地址呢&#xff1f; 1.下载SADPTOOL 第一步在 HIKVISON 官网的‘下载’部分下载SADPTOOL工具。并进行安装。 该工具具有网络搜索的功能。可以在局域网内将…