在前文讲解了海康工业相机SDK与OpenCV的安装与环境配置,本文接着讲解SDK给的OpenCV的demo,主要实现RawDataFormatConvert的功能,即将海康连续采集的图像转化为OpenCV的Mat格式并显示于屏幕。
在海康SDK安装位置,找到D:\Softwares\MVS\Development\Samples\OpenCV\VC的Samples_OpenCV.sln并打开,下面会先对SDK的调用相机的各功能进行详解:
1.1 首先定义句柄和相机操作的返回值,当相机操作出现问题时,需要将nRet,可以根据对应的返回值查询可能出现的问题。
int nRet = MV_OK; void* handle = NULL; 1.2 列出当前的设备管理目录,输入对应值,选择相应的相机设备。 // 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, &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); printf("Find No Devices!\n"); break; // input the format to convert unsigned int nFormat = 0; // select device to connect printf("Please Input camera index(0-%d):", stDeviceList.nDeviceNum-1); unsigned int nIndex = 0; scanf("%d", &nIndex); if (nIndex >= stDeviceList.nDeviceNum) printf("Input error!\n"); break; 1.3 创建句柄并打开相机设备 // 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; // open device nRet = MV_CC_OpenDevice(handle); if (MV_OK != nRet) printf("Open Device fail! nRet [0x%x]\n", nRet); break; 1.4 设置相机参数,图片的宽度与高度、相机的曝光时间与增益;返回相机参数,图片的宽度与高度、相机的曝光时间与增益。 nRet = SetParameters(handle, WidthValue, HeightValue, ExposureTimeValue, GainValue); if (MV_OK != nRet) printf("Set parameters fail! nRet [0x%x]\n", nRet); break; nRet = GetParameters(handle); if (MV_OK != nRet) printf("Get parameters fail! nRet [0x%x]\n", nRet); break; 1.5 设置网络最佳的包大小,设置相机的触发模式 // Detection network optimal package size(It only works for the GigE camera) if (stDeviceList.pDeviceInfo[nIndex]->nTLayerType == MV_GIGE_DEVICE) int nPacketSize = MV_CC_GetOptimalPacketSize(handle); if (nPacketSize > 0) nRet = MV_CC_SetIntValue(handle,"GevSCPSPacketSize",nPacketSize); if(nRet != MV_OK) printf("Warning: Set Packet Size fail nRet [0x%x]!", nRet); printf("Warning: Get Packet Size fail nRet [0x%x]!", nPacketSize); // Set trigger mode as off nRet = MV_CC_SetEnumValue(handle, "TriggerMode", 0); if (MV_OK != nRet) printf("Set Trigger Mode fail! nRet [0x%x]\n", nRet); break; // Get payload size MVCC_INTVALUE stParam; memset(&stParam, 0, sizeof(MVCC_INTVALUE)); nRet = MV_CC_GetIntValue(handle, "PayloadSize", &stParam); if (MV_OK != nRet) printf("Get PayloadSize fail! nRet [0x%x]\n", nRet); break; g_nPayloadSize = stParam.nCurValue; 1.6 开启连续采集模式,并分配缓冲内存区 // Start grab image nRet = MV_CC_StartGrabbing(handle); if (MV_OK != nRet) printf("Start Grabbing fail! nRet [0x%x]\n", nRet); break; MV_FRAME_OUT stImageInfo = {0}; memset(&stImageInfo, 0, sizeof(MV_FRAME_OUT)); unsigned char * pData = (unsigned char *)malloc(sizeof(unsigned char) * (g_nPayloadSize)); if (pData == NULL) printf("Allocate memory failed.\n"); break; 1.7 停止采集 // Stop grab image nRet = MV_CC_StopGrabbing(handle); if (MV_OK != nRet) printf("Stop Grabbing fail! nRet [0x%x]\n", nRet); break; 1.8 关闭相机并摧毁句柄 // Close device nRet = MV_CC_CloseDevice(handle); if (MV_OK != nRet) printf("ClosDevice fail! nRet [0x%x]\n", nRet); break; // Destroy handle nRet = MV_CC_DestroyHandle(handle); if (MV_OK != nRet) printf("Destroy Handle fail! nRet [0x%x]\n", nRet); break; 二、OpenCV相关操作 在RawDataFormatConvert中,最主要的功能是将连续采集的图片,从相机的缓冲区域转化OpenCV的Mat格式,并在屏幕上显示,因此我们可以利用Mat格式调用OpenCV的相关操作。 while (true) clock_t startTime, endTime; startTime = clock(); nRet = MV_CC_GetImageBuffer(handle, &stImageInfo, 1000); if (nRet == MV_OK) printf("Get One Frame: Width[%d], Height[%d], nFrameNum[%d]\n", stImageInfo.stFrameInfo.nWidth, stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nFrameNum); printf("No data[0x%x]\n", nRet); free(pData); pData = NULL; break; cv::Mat srcImage; srcImage = cv::Mat(stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nWidth, CV_8UC1, stImageInfo.pBufAddr); cv::namedWindow("srcImage", 0); cv::resizeWindow("srcImage", 918, 768); cv::imshow("srcImage", srcImage); cv::waitKey(1); srcImage.release(); nRet = MV_CC_FreeImageBuffer(handle, &stImageInfo); endTime = clock(); std::cout << "Run Time:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl; std::cout<< std::endl; 根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。 三、运行结果 运行结果如图所示: public MyCamera myCamera;//相机对象 MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; IntPtr m_BufForDriver = IntPtr.Zero; private static O... 文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程。在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项的缺失,无法运行dll,有大哥有其他办法的加群交流。01—大华SDK帮助类介绍,这里做了个dll的帮助类,把相机基本功能都写进去了:枚举-实例化-相机连接-回调取图-触发设置-曝光调试等-关闭相机;其... 工控机主要应用与视觉检测!相机网线及工控机网口都是千兆的!设置完巨帧数和速度与双工(选择为全双工),显示速度低与1GB,不能够正常工作。C.LA-Properdes-Advanced-将RecerveBuffers更改为2048。E.LAN-属性-电源管理-取消选中允许计算机关闭此设备以保存电源。这种情况均为MVS设置不熟悉,可参照如下设置优化相应端口相机配置。D.局域网-属性-高级-将传输缓冲区更改为20484。B.LAN-属性-高级-将中断记录部分更改为执行。A.关闭采集控制帧速率控制。 1.不会转换格式先找demo 开发海康相机sdk联合opencv的时候,格式转换问题搞了整整一天,一开始不知道如何将抓图得到的数据转成opencv的Mat格式用于图像处理,于是开始找海康自带的demo和开发手册,在这里也建议最好看第一时间就看开发手册及自带demo。我一开始是在下载的sdk里找demo,后面发现下载mvs(海康的客户端)的安装... 针对视频播放的可以参见H264播放器编程指南。它里面用到如下方法获取 BOOL PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); SDK版本: CH-HCNetSDK(Linux)4.0.2.7 OpenCv:2.2.0 将控制台演示代码的 GetStream.cpp 覆盖为以下,就能转换成 IplImage 内存数据,IplImage *img 是YUV格式,IplImage *imgBgr 是BGR格式: 系列博客———————-海康威视摄像头+OpenCV+VS2017 图像处理小结(二)本系列博客记载博主用海康威视网络摄像头以及OpenCV库和VS2017开发环境搭建 视频处理工程 的过程,主要是海康威视摄像头与电脑的有线与无线连接,视频流数据的获取以及格式转换,开发环境以及三方库的的配置, 多线程处理转码后的图像帧的相关步骤,并且给出了一个简单的实时人脸检测例程。第一篇主要介绍海康摄像头的... 1、海康威视摄像头+OpenCV+VS2017 图像处理小结(一 详细描述了相机的型号、配置软件 2、海康威视摄像头+OpenCV+VS2017 图像处理小结(二) 讲述了工程目录构建和配置:
int nRet = MV_OK; void* handle = NULL; 1.2 列出当前的设备管理目录,输入对应值,选择相应的相机设备。
1.2 列出当前的设备管理目录,输入对应值,选择相应的相机设备。
// 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, &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); printf("Find No Devices!\n"); break; // input the format to convert unsigned int nFormat = 0; // select device to connect printf("Please Input camera index(0-%d):", stDeviceList.nDeviceNum-1); unsigned int nIndex = 0; scanf("%d", &nIndex); if (nIndex >= stDeviceList.nDeviceNum) printf("Input error!\n"); break; 1.3 创建句柄并打开相机设备 // 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; // open device nRet = MV_CC_OpenDevice(handle); if (MV_OK != nRet) printf("Open Device fail! nRet [0x%x]\n", nRet); break; 1.4 设置相机参数,图片的宽度与高度、相机的曝光时间与增益;返回相机参数,图片的宽度与高度、相机的曝光时间与增益。 nRet = SetParameters(handle, WidthValue, HeightValue, ExposureTimeValue, GainValue); if (MV_OK != nRet) printf("Set parameters fail! nRet [0x%x]\n", nRet); break; nRet = GetParameters(handle); if (MV_OK != nRet) printf("Get parameters fail! nRet [0x%x]\n", nRet); break; 1.5 设置网络最佳的包大小,设置相机的触发模式 // Detection network optimal package size(It only works for the GigE camera) if (stDeviceList.pDeviceInfo[nIndex]->nTLayerType == MV_GIGE_DEVICE) int nPacketSize = MV_CC_GetOptimalPacketSize(handle); if (nPacketSize > 0) nRet = MV_CC_SetIntValue(handle,"GevSCPSPacketSize",nPacketSize); if(nRet != MV_OK) printf("Warning: Set Packet Size fail nRet [0x%x]!", nRet); printf("Warning: Get Packet Size fail nRet [0x%x]!", nPacketSize); // Set trigger mode as off nRet = MV_CC_SetEnumValue(handle, "TriggerMode", 0); if (MV_OK != nRet) printf("Set Trigger Mode fail! nRet [0x%x]\n", nRet); break; // Get payload size MVCC_INTVALUE stParam; memset(&stParam, 0, sizeof(MVCC_INTVALUE)); nRet = MV_CC_GetIntValue(handle, "PayloadSize", &stParam); if (MV_OK != nRet) printf("Get PayloadSize fail! nRet [0x%x]\n", nRet); break; g_nPayloadSize = stParam.nCurValue; 1.6 开启连续采集模式,并分配缓冲内存区 // Start grab image nRet = MV_CC_StartGrabbing(handle); if (MV_OK != nRet) printf("Start Grabbing fail! nRet [0x%x]\n", nRet); break; MV_FRAME_OUT stImageInfo = {0}; memset(&stImageInfo, 0, sizeof(MV_FRAME_OUT)); unsigned char * pData = (unsigned char *)malloc(sizeof(unsigned char) * (g_nPayloadSize)); if (pData == NULL) printf("Allocate memory failed.\n"); break; 1.7 停止采集 // Stop grab image nRet = MV_CC_StopGrabbing(handle); if (MV_OK != nRet) printf("Stop Grabbing fail! nRet [0x%x]\n", nRet); break; 1.8 关闭相机并摧毁句柄 // Close device nRet = MV_CC_CloseDevice(handle); if (MV_OK != nRet) printf("ClosDevice fail! nRet [0x%x]\n", nRet); break; // Destroy handle nRet = MV_CC_DestroyHandle(handle); if (MV_OK != nRet) printf("Destroy Handle fail! nRet [0x%x]\n", nRet); break; 二、OpenCV相关操作 在RawDataFormatConvert中,最主要的功能是将连续采集的图片,从相机的缓冲区域转化OpenCV的Mat格式,并在屏幕上显示,因此我们可以利用Mat格式调用OpenCV的相关操作。 while (true) clock_t startTime, endTime; startTime = clock(); nRet = MV_CC_GetImageBuffer(handle, &stImageInfo, 1000); if (nRet == MV_OK) printf("Get One Frame: Width[%d], Height[%d], nFrameNum[%d]\n", stImageInfo.stFrameInfo.nWidth, stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nFrameNum); printf("No data[0x%x]\n", nRet); free(pData); pData = NULL; break; cv::Mat srcImage; srcImage = cv::Mat(stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nWidth, CV_8UC1, stImageInfo.pBufAddr); cv::namedWindow("srcImage", 0); cv::resizeWindow("srcImage", 918, 768); cv::imshow("srcImage", srcImage); cv::waitKey(1); srcImage.release(); nRet = MV_CC_FreeImageBuffer(handle, &stImageInfo); endTime = clock(); std::cout << "Run Time:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl; std::cout<< std::endl; 根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。 三、运行结果 运行结果如图所示: public MyCamera myCamera;//相机对象 MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; IntPtr m_BufForDriver = IntPtr.Zero; private static O... 文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程。在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项的缺失,无法运行dll,有大哥有其他办法的加群交流。01—大华SDK帮助类介绍,这里做了个dll的帮助类,把相机基本功能都写进去了:枚举-实例化-相机连接-回调取图-触发设置-曝光调试等-关闭相机;其... 工控机主要应用与视觉检测!相机网线及工控机网口都是千兆的!设置完巨帧数和速度与双工(选择为全双工),显示速度低与1GB,不能够正常工作。C.LA-Properdes-Advanced-将RecerveBuffers更改为2048。E.LAN-属性-电源管理-取消选中允许计算机关闭此设备以保存电源。这种情况均为MVS设置不熟悉,可参照如下设置优化相应端口相机配置。D.局域网-属性-高级-将传输缓冲区更改为20484。B.LAN-属性-高级-将中断记录部分更改为执行。A.关闭采集控制帧速率控制。 1.不会转换格式先找demo 开发海康相机sdk联合opencv的时候,格式转换问题搞了整整一天,一开始不知道如何将抓图得到的数据转成opencv的Mat格式用于图像处理,于是开始找海康自带的demo和开发手册,在这里也建议最好看第一时间就看开发手册及自带demo。我一开始是在下载的sdk里找demo,后面发现下载mvs(海康的客户端)的安装... 针对视频播放的可以参见H264播放器编程指南。它里面用到如下方法获取 BOOL PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); SDK版本: CH-HCNetSDK(Linux)4.0.2.7 OpenCv:2.2.0 将控制台演示代码的 GetStream.cpp 覆盖为以下,就能转换成 IplImage 内存数据,IplImage *img 是YUV格式,IplImage *imgBgr 是BGR格式: 系列博客———————-海康威视摄像头+OpenCV+VS2017 图像处理小结(二)本系列博客记载博主用海康威视网络摄像头以及OpenCV库和VS2017开发环境搭建 视频处理工程 的过程,主要是海康威视摄像头与电脑的有线与无线连接,视频流数据的获取以及格式转换,开发环境以及三方库的的配置, 多线程处理转码后的图像帧的相关步骤,并且给出了一个简单的实时人脸检测例程。第一篇主要介绍海康摄像头的... 1、海康威视摄像头+OpenCV+VS2017 图像处理小结(一 详细描述了相机的型号、配置软件 2、海康威视摄像头+OpenCV+VS2017 图像处理小结(二) 讲述了工程目录构建和配置:
// 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, &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); printf("Find No Devices!\n"); break; // input the format to convert unsigned int nFormat = 0; // select device to connect printf("Please Input camera index(0-%d):", stDeviceList.nDeviceNum-1); unsigned int nIndex = 0; scanf("%d", &nIndex); if (nIndex >= stDeviceList.nDeviceNum) printf("Input error!\n"); break; 1.3 创建句柄并打开相机设备
1.3 创建句柄并打开相机设备
// 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; // open device nRet = MV_CC_OpenDevice(handle); if (MV_OK != nRet) printf("Open Device fail! nRet [0x%x]\n", nRet); break; 1.4 设置相机参数,图片的宽度与高度、相机的曝光时间与增益;返回相机参数,图片的宽度与高度、相机的曝光时间与增益。 nRet = SetParameters(handle, WidthValue, HeightValue, ExposureTimeValue, GainValue); if (MV_OK != nRet) printf("Set parameters fail! nRet [0x%x]\n", nRet); break; nRet = GetParameters(handle); if (MV_OK != nRet) printf("Get parameters fail! nRet [0x%x]\n", nRet); break; 1.5 设置网络最佳的包大小,设置相机的触发模式 // Detection network optimal package size(It only works for the GigE camera) if (stDeviceList.pDeviceInfo[nIndex]->nTLayerType == MV_GIGE_DEVICE) int nPacketSize = MV_CC_GetOptimalPacketSize(handle); if (nPacketSize > 0) nRet = MV_CC_SetIntValue(handle,"GevSCPSPacketSize",nPacketSize); if(nRet != MV_OK) printf("Warning: Set Packet Size fail nRet [0x%x]!", nRet); printf("Warning: Get Packet Size fail nRet [0x%x]!", nPacketSize); // Set trigger mode as off nRet = MV_CC_SetEnumValue(handle, "TriggerMode", 0); if (MV_OK != nRet) printf("Set Trigger Mode fail! nRet [0x%x]\n", nRet); break; // Get payload size MVCC_INTVALUE stParam; memset(&stParam, 0, sizeof(MVCC_INTVALUE)); nRet = MV_CC_GetIntValue(handle, "PayloadSize", &stParam); if (MV_OK != nRet) printf("Get PayloadSize fail! nRet [0x%x]\n", nRet); break; g_nPayloadSize = stParam.nCurValue; 1.6 开启连续采集模式,并分配缓冲内存区 // Start grab image nRet = MV_CC_StartGrabbing(handle); if (MV_OK != nRet) printf("Start Grabbing fail! nRet [0x%x]\n", nRet); break; MV_FRAME_OUT stImageInfo = {0}; memset(&stImageInfo, 0, sizeof(MV_FRAME_OUT)); unsigned char * pData = (unsigned char *)malloc(sizeof(unsigned char) * (g_nPayloadSize)); if (pData == NULL) printf("Allocate memory failed.\n"); break; 1.7 停止采集 // Stop grab image nRet = MV_CC_StopGrabbing(handle); if (MV_OK != nRet) printf("Stop Grabbing fail! nRet [0x%x]\n", nRet); break; 1.8 关闭相机并摧毁句柄 // Close device nRet = MV_CC_CloseDevice(handle); if (MV_OK != nRet) printf("ClosDevice fail! nRet [0x%x]\n", nRet); break; // Destroy handle nRet = MV_CC_DestroyHandle(handle); if (MV_OK != nRet) printf("Destroy Handle fail! nRet [0x%x]\n", nRet); break; 二、OpenCV相关操作 在RawDataFormatConvert中,最主要的功能是将连续采集的图片,从相机的缓冲区域转化OpenCV的Mat格式,并在屏幕上显示,因此我们可以利用Mat格式调用OpenCV的相关操作。 while (true) clock_t startTime, endTime; startTime = clock(); nRet = MV_CC_GetImageBuffer(handle, &stImageInfo, 1000); if (nRet == MV_OK) printf("Get One Frame: Width[%d], Height[%d], nFrameNum[%d]\n", stImageInfo.stFrameInfo.nWidth, stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nFrameNum); printf("No data[0x%x]\n", nRet); free(pData); pData = NULL; break; cv::Mat srcImage; srcImage = cv::Mat(stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nWidth, CV_8UC1, stImageInfo.pBufAddr); cv::namedWindow("srcImage", 0); cv::resizeWindow("srcImage", 918, 768); cv::imshow("srcImage", srcImage); cv::waitKey(1); srcImage.release(); nRet = MV_CC_FreeImageBuffer(handle, &stImageInfo); endTime = clock(); std::cout << "Run Time:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl; std::cout<< std::endl; 根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。 三、运行结果 运行结果如图所示: public MyCamera myCamera;//相机对象 MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; IntPtr m_BufForDriver = IntPtr.Zero; private static O... 文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程。在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项的缺失,无法运行dll,有大哥有其他办法的加群交流。01—大华SDK帮助类介绍,这里做了个dll的帮助类,把相机基本功能都写进去了:枚举-实例化-相机连接-回调取图-触发设置-曝光调试等-关闭相机;其... 工控机主要应用与视觉检测!相机网线及工控机网口都是千兆的!设置完巨帧数和速度与双工(选择为全双工),显示速度低与1GB,不能够正常工作。C.LA-Properdes-Advanced-将RecerveBuffers更改为2048。E.LAN-属性-电源管理-取消选中允许计算机关闭此设备以保存电源。这种情况均为MVS设置不熟悉,可参照如下设置优化相应端口相机配置。D.局域网-属性-高级-将传输缓冲区更改为20484。B.LAN-属性-高级-将中断记录部分更改为执行。A.关闭采集控制帧速率控制。 1.不会转换格式先找demo 开发海康相机sdk联合opencv的时候,格式转换问题搞了整整一天,一开始不知道如何将抓图得到的数据转成opencv的Mat格式用于图像处理,于是开始找海康自带的demo和开发手册,在这里也建议最好看第一时间就看开发手册及自带demo。我一开始是在下载的sdk里找demo,后面发现下载mvs(海康的客户端)的安装... 针对视频播放的可以参见H264播放器编程指南。它里面用到如下方法获取 BOOL PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); SDK版本: CH-HCNetSDK(Linux)4.0.2.7 OpenCv:2.2.0 将控制台演示代码的 GetStream.cpp 覆盖为以下,就能转换成 IplImage 内存数据,IplImage *img 是YUV格式,IplImage *imgBgr 是BGR格式: 系列博客———————-海康威视摄像头+OpenCV+VS2017 图像处理小结(二)本系列博客记载博主用海康威视网络摄像头以及OpenCV库和VS2017开发环境搭建 视频处理工程 的过程,主要是海康威视摄像头与电脑的有线与无线连接,视频流数据的获取以及格式转换,开发环境以及三方库的的配置, 多线程处理转码后的图像帧的相关步骤,并且给出了一个简单的实时人脸检测例程。第一篇主要介绍海康摄像头的... 1、海康威视摄像头+OpenCV+VS2017 图像处理小结(一 详细描述了相机的型号、配置软件 2、海康威视摄像头+OpenCV+VS2017 图像处理小结(二) 讲述了工程目录构建和配置:
// 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; // open device nRet = MV_CC_OpenDevice(handle); if (MV_OK != nRet) printf("Open Device fail! nRet [0x%x]\n", nRet); break; 1.4 设置相机参数,图片的宽度与高度、相机的曝光时间与增益;返回相机参数,图片的宽度与高度、相机的曝光时间与增益。
1.4 设置相机参数,图片的宽度与高度、相机的曝光时间与增益;返回相机参数,图片的宽度与高度、相机的曝光时间与增益。
nRet = SetParameters(handle, WidthValue, HeightValue, ExposureTimeValue, GainValue); if (MV_OK != nRet) printf("Set parameters fail! nRet [0x%x]\n", nRet); break; nRet = GetParameters(handle); if (MV_OK != nRet) printf("Get parameters fail! nRet [0x%x]\n", nRet); break; 1.5 设置网络最佳的包大小,设置相机的触发模式 // Detection network optimal package size(It only works for the GigE camera) if (stDeviceList.pDeviceInfo[nIndex]->nTLayerType == MV_GIGE_DEVICE) int nPacketSize = MV_CC_GetOptimalPacketSize(handle); if (nPacketSize > 0) nRet = MV_CC_SetIntValue(handle,"GevSCPSPacketSize",nPacketSize); if(nRet != MV_OK) printf("Warning: Set Packet Size fail nRet [0x%x]!", nRet); printf("Warning: Get Packet Size fail nRet [0x%x]!", nPacketSize); // Set trigger mode as off nRet = MV_CC_SetEnumValue(handle, "TriggerMode", 0); if (MV_OK != nRet) printf("Set Trigger Mode fail! nRet [0x%x]\n", nRet); break; // Get payload size MVCC_INTVALUE stParam; memset(&stParam, 0, sizeof(MVCC_INTVALUE)); nRet = MV_CC_GetIntValue(handle, "PayloadSize", &stParam); if (MV_OK != nRet) printf("Get PayloadSize fail! nRet [0x%x]\n", nRet); break; g_nPayloadSize = stParam.nCurValue; 1.6 开启连续采集模式,并分配缓冲内存区 // Start grab image nRet = MV_CC_StartGrabbing(handle); if (MV_OK != nRet) printf("Start Grabbing fail! nRet [0x%x]\n", nRet); break; MV_FRAME_OUT stImageInfo = {0}; memset(&stImageInfo, 0, sizeof(MV_FRAME_OUT)); unsigned char * pData = (unsigned char *)malloc(sizeof(unsigned char) * (g_nPayloadSize)); if (pData == NULL) printf("Allocate memory failed.\n"); break; 1.7 停止采集 // Stop grab image nRet = MV_CC_StopGrabbing(handle); if (MV_OK != nRet) printf("Stop Grabbing fail! nRet [0x%x]\n", nRet); break; 1.8 关闭相机并摧毁句柄 // Close device nRet = MV_CC_CloseDevice(handle); if (MV_OK != nRet) printf("ClosDevice fail! nRet [0x%x]\n", nRet); break; // Destroy handle nRet = MV_CC_DestroyHandle(handle); if (MV_OK != nRet) printf("Destroy Handle fail! nRet [0x%x]\n", nRet); break; 二、OpenCV相关操作 在RawDataFormatConvert中,最主要的功能是将连续采集的图片,从相机的缓冲区域转化OpenCV的Mat格式,并在屏幕上显示,因此我们可以利用Mat格式调用OpenCV的相关操作。 while (true) clock_t startTime, endTime; startTime = clock(); nRet = MV_CC_GetImageBuffer(handle, &stImageInfo, 1000); if (nRet == MV_OK) printf("Get One Frame: Width[%d], Height[%d], nFrameNum[%d]\n", stImageInfo.stFrameInfo.nWidth, stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nFrameNum); printf("No data[0x%x]\n", nRet); free(pData); pData = NULL; break; cv::Mat srcImage; srcImage = cv::Mat(stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nWidth, CV_8UC1, stImageInfo.pBufAddr); cv::namedWindow("srcImage", 0); cv::resizeWindow("srcImage", 918, 768); cv::imshow("srcImage", srcImage); cv::waitKey(1); srcImage.release(); nRet = MV_CC_FreeImageBuffer(handle, &stImageInfo); endTime = clock(); std::cout << "Run Time:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl; std::cout<< std::endl; 根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。 三、运行结果 运行结果如图所示: public MyCamera myCamera;//相机对象 MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; IntPtr m_BufForDriver = IntPtr.Zero; private static O... 文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程。在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项的缺失,无法运行dll,有大哥有其他办法的加群交流。01—大华SDK帮助类介绍,这里做了个dll的帮助类,把相机基本功能都写进去了:枚举-实例化-相机连接-回调取图-触发设置-曝光调试等-关闭相机;其... 工控机主要应用与视觉检测!相机网线及工控机网口都是千兆的!设置完巨帧数和速度与双工(选择为全双工),显示速度低与1GB,不能够正常工作。C.LA-Properdes-Advanced-将RecerveBuffers更改为2048。E.LAN-属性-电源管理-取消选中允许计算机关闭此设备以保存电源。这种情况均为MVS设置不熟悉,可参照如下设置优化相应端口相机配置。D.局域网-属性-高级-将传输缓冲区更改为20484。B.LAN-属性-高级-将中断记录部分更改为执行。A.关闭采集控制帧速率控制。 1.不会转换格式先找demo 开发海康相机sdk联合opencv的时候,格式转换问题搞了整整一天,一开始不知道如何将抓图得到的数据转成opencv的Mat格式用于图像处理,于是开始找海康自带的demo和开发手册,在这里也建议最好看第一时间就看开发手册及自带demo。我一开始是在下载的sdk里找demo,后面发现下载mvs(海康的客户端)的安装... 针对视频播放的可以参见H264播放器编程指南。它里面用到如下方法获取 BOOL PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); SDK版本: CH-HCNetSDK(Linux)4.0.2.7 OpenCv:2.2.0 将控制台演示代码的 GetStream.cpp 覆盖为以下,就能转换成 IplImage 内存数据,IplImage *img 是YUV格式,IplImage *imgBgr 是BGR格式: 系列博客———————-海康威视摄像头+OpenCV+VS2017 图像处理小结(二)本系列博客记载博主用海康威视网络摄像头以及OpenCV库和VS2017开发环境搭建 视频处理工程 的过程,主要是海康威视摄像头与电脑的有线与无线连接,视频流数据的获取以及格式转换,开发环境以及三方库的的配置, 多线程处理转码后的图像帧的相关步骤,并且给出了一个简单的实时人脸检测例程。第一篇主要介绍海康摄像头的... 1、海康威视摄像头+OpenCV+VS2017 图像处理小结(一 详细描述了相机的型号、配置软件 2、海康威视摄像头+OpenCV+VS2017 图像处理小结(二) 讲述了工程目录构建和配置:
nRet = SetParameters(handle, WidthValue, HeightValue, ExposureTimeValue, GainValue); if (MV_OK != nRet) printf("Set parameters fail! nRet [0x%x]\n", nRet); break; nRet = GetParameters(handle); if (MV_OK != nRet) printf("Get parameters fail! nRet [0x%x]\n", nRet); break; 1.5 设置网络最佳的包大小,设置相机的触发模式
1.5 设置网络最佳的包大小,设置相机的触发模式
// Detection network optimal package size(It only works for the GigE camera) if (stDeviceList.pDeviceInfo[nIndex]->nTLayerType == MV_GIGE_DEVICE) int nPacketSize = MV_CC_GetOptimalPacketSize(handle); if (nPacketSize > 0) nRet = MV_CC_SetIntValue(handle,"GevSCPSPacketSize",nPacketSize); if(nRet != MV_OK) printf("Warning: Set Packet Size fail nRet [0x%x]!", nRet); printf("Warning: Get Packet Size fail nRet [0x%x]!", nPacketSize); // Set trigger mode as off nRet = MV_CC_SetEnumValue(handle, "TriggerMode", 0); if (MV_OK != nRet) printf("Set Trigger Mode fail! nRet [0x%x]\n", nRet); break; // Get payload size MVCC_INTVALUE stParam; memset(&stParam, 0, sizeof(MVCC_INTVALUE)); nRet = MV_CC_GetIntValue(handle, "PayloadSize", &stParam); if (MV_OK != nRet) printf("Get PayloadSize fail! nRet [0x%x]\n", nRet); break; g_nPayloadSize = stParam.nCurValue; 1.6 开启连续采集模式,并分配缓冲内存区 // Start grab image nRet = MV_CC_StartGrabbing(handle); if (MV_OK != nRet) printf("Start Grabbing fail! nRet [0x%x]\n", nRet); break; MV_FRAME_OUT stImageInfo = {0}; memset(&stImageInfo, 0, sizeof(MV_FRAME_OUT)); unsigned char * pData = (unsigned char *)malloc(sizeof(unsigned char) * (g_nPayloadSize)); if (pData == NULL) printf("Allocate memory failed.\n"); break; 1.7 停止采集 // Stop grab image nRet = MV_CC_StopGrabbing(handle); if (MV_OK != nRet) printf("Stop Grabbing fail! nRet [0x%x]\n", nRet); break; 1.8 关闭相机并摧毁句柄 // Close device nRet = MV_CC_CloseDevice(handle); if (MV_OK != nRet) printf("ClosDevice fail! nRet [0x%x]\n", nRet); break; // Destroy handle nRet = MV_CC_DestroyHandle(handle); if (MV_OK != nRet) printf("Destroy Handle fail! nRet [0x%x]\n", nRet); break; 二、OpenCV相关操作 在RawDataFormatConvert中,最主要的功能是将连续采集的图片,从相机的缓冲区域转化OpenCV的Mat格式,并在屏幕上显示,因此我们可以利用Mat格式调用OpenCV的相关操作。 while (true) clock_t startTime, endTime; startTime = clock(); nRet = MV_CC_GetImageBuffer(handle, &stImageInfo, 1000); if (nRet == MV_OK) printf("Get One Frame: Width[%d], Height[%d], nFrameNum[%d]\n", stImageInfo.stFrameInfo.nWidth, stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nFrameNum); printf("No data[0x%x]\n", nRet); free(pData); pData = NULL; break; cv::Mat srcImage; srcImage = cv::Mat(stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nWidth, CV_8UC1, stImageInfo.pBufAddr); cv::namedWindow("srcImage", 0); cv::resizeWindow("srcImage", 918, 768); cv::imshow("srcImage", srcImage); cv::waitKey(1); srcImage.release(); nRet = MV_CC_FreeImageBuffer(handle, &stImageInfo); endTime = clock(); std::cout << "Run Time:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl; std::cout<< std::endl; 根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。 三、运行结果 运行结果如图所示: public MyCamera myCamera;//相机对象 MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; IntPtr m_BufForDriver = IntPtr.Zero; private static O... 文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程。在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项的缺失,无法运行dll,有大哥有其他办法的加群交流。01—大华SDK帮助类介绍,这里做了个dll的帮助类,把相机基本功能都写进去了:枚举-实例化-相机连接-回调取图-触发设置-曝光调试等-关闭相机;其... 工控机主要应用与视觉检测!相机网线及工控机网口都是千兆的!设置完巨帧数和速度与双工(选择为全双工),显示速度低与1GB,不能够正常工作。C.LA-Properdes-Advanced-将RecerveBuffers更改为2048。E.LAN-属性-电源管理-取消选中允许计算机关闭此设备以保存电源。这种情况均为MVS设置不熟悉,可参照如下设置优化相应端口相机配置。D.局域网-属性-高级-将传输缓冲区更改为20484。B.LAN-属性-高级-将中断记录部分更改为执行。A.关闭采集控制帧速率控制。 1.不会转换格式先找demo 开发海康相机sdk联合opencv的时候,格式转换问题搞了整整一天,一开始不知道如何将抓图得到的数据转成opencv的Mat格式用于图像处理,于是开始找海康自带的demo和开发手册,在这里也建议最好看第一时间就看开发手册及自带demo。我一开始是在下载的sdk里找demo,后面发现下载mvs(海康的客户端)的安装... 针对视频播放的可以参见H264播放器编程指南。它里面用到如下方法获取 BOOL PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); SDK版本: CH-HCNetSDK(Linux)4.0.2.7 OpenCv:2.2.0 将控制台演示代码的 GetStream.cpp 覆盖为以下,就能转换成 IplImage 内存数据,IplImage *img 是YUV格式,IplImage *imgBgr 是BGR格式: 系列博客———————-海康威视摄像头+OpenCV+VS2017 图像处理小结(二)本系列博客记载博主用海康威视网络摄像头以及OpenCV库和VS2017开发环境搭建 视频处理工程 的过程,主要是海康威视摄像头与电脑的有线与无线连接,视频流数据的获取以及格式转换,开发环境以及三方库的的配置, 多线程处理转码后的图像帧的相关步骤,并且给出了一个简单的实时人脸检测例程。第一篇主要介绍海康摄像头的... 1、海康威视摄像头+OpenCV+VS2017 图像处理小结(一 详细描述了相机的型号、配置软件 2、海康威视摄像头+OpenCV+VS2017 图像处理小结(二) 讲述了工程目录构建和配置:
// Detection network optimal package size(It only works for the GigE camera) if (stDeviceList.pDeviceInfo[nIndex]->nTLayerType == MV_GIGE_DEVICE) int nPacketSize = MV_CC_GetOptimalPacketSize(handle); if (nPacketSize > 0) nRet = MV_CC_SetIntValue(handle,"GevSCPSPacketSize",nPacketSize); if(nRet != MV_OK) printf("Warning: Set Packet Size fail nRet [0x%x]!", nRet); printf("Warning: Get Packet Size fail nRet [0x%x]!", nPacketSize); // Set trigger mode as off nRet = MV_CC_SetEnumValue(handle, "TriggerMode", 0); if (MV_OK != nRet) printf("Set Trigger Mode fail! nRet [0x%x]\n", nRet); break; // Get payload size MVCC_INTVALUE stParam; memset(&stParam, 0, sizeof(MVCC_INTVALUE)); nRet = MV_CC_GetIntValue(handle, "PayloadSize", &stParam); if (MV_OK != nRet) printf("Get PayloadSize fail! nRet [0x%x]\n", nRet); break; g_nPayloadSize = stParam.nCurValue; 1.6 开启连续采集模式,并分配缓冲内存区
1.6 开启连续采集模式,并分配缓冲内存区
// Start grab image nRet = MV_CC_StartGrabbing(handle); if (MV_OK != nRet) printf("Start Grabbing fail! nRet [0x%x]\n", nRet); break; MV_FRAME_OUT stImageInfo = {0}; memset(&stImageInfo, 0, sizeof(MV_FRAME_OUT)); unsigned char * pData = (unsigned char *)malloc(sizeof(unsigned char) * (g_nPayloadSize)); if (pData == NULL) printf("Allocate memory failed.\n"); break; 1.7 停止采集 // Stop grab image nRet = MV_CC_StopGrabbing(handle); if (MV_OK != nRet) printf("Stop Grabbing fail! nRet [0x%x]\n", nRet); break; 1.8 关闭相机并摧毁句柄 // Close device nRet = MV_CC_CloseDevice(handle); if (MV_OK != nRet) printf("ClosDevice fail! nRet [0x%x]\n", nRet); break; // Destroy handle nRet = MV_CC_DestroyHandle(handle); if (MV_OK != nRet) printf("Destroy Handle fail! nRet [0x%x]\n", nRet); break; 二、OpenCV相关操作 在RawDataFormatConvert中,最主要的功能是将连续采集的图片,从相机的缓冲区域转化OpenCV的Mat格式,并在屏幕上显示,因此我们可以利用Mat格式调用OpenCV的相关操作。 while (true) clock_t startTime, endTime; startTime = clock(); nRet = MV_CC_GetImageBuffer(handle, &stImageInfo, 1000); if (nRet == MV_OK) printf("Get One Frame: Width[%d], Height[%d], nFrameNum[%d]\n", stImageInfo.stFrameInfo.nWidth, stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nFrameNum); printf("No data[0x%x]\n", nRet); free(pData); pData = NULL; break; cv::Mat srcImage; srcImage = cv::Mat(stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nWidth, CV_8UC1, stImageInfo.pBufAddr); cv::namedWindow("srcImage", 0); cv::resizeWindow("srcImage", 918, 768); cv::imshow("srcImage", srcImage); cv::waitKey(1); srcImage.release(); nRet = MV_CC_FreeImageBuffer(handle, &stImageInfo); endTime = clock(); std::cout << "Run Time:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl; std::cout<< std::endl; 根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。 三、运行结果 运行结果如图所示: public MyCamera myCamera;//相机对象 MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; IntPtr m_BufForDriver = IntPtr.Zero; private static O... 文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程。在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项的缺失,无法运行dll,有大哥有其他办法的加群交流。01—大华SDK帮助类介绍,这里做了个dll的帮助类,把相机基本功能都写进去了:枚举-实例化-相机连接-回调取图-触发设置-曝光调试等-关闭相机;其... 工控机主要应用与视觉检测!相机网线及工控机网口都是千兆的!设置完巨帧数和速度与双工(选择为全双工),显示速度低与1GB,不能够正常工作。C.LA-Properdes-Advanced-将RecerveBuffers更改为2048。E.LAN-属性-电源管理-取消选中允许计算机关闭此设备以保存电源。这种情况均为MVS设置不熟悉,可参照如下设置优化相应端口相机配置。D.局域网-属性-高级-将传输缓冲区更改为20484。B.LAN-属性-高级-将中断记录部分更改为执行。A.关闭采集控制帧速率控制。 1.不会转换格式先找demo 开发海康相机sdk联合opencv的时候,格式转换问题搞了整整一天,一开始不知道如何将抓图得到的数据转成opencv的Mat格式用于图像处理,于是开始找海康自带的demo和开发手册,在这里也建议最好看第一时间就看开发手册及自带demo。我一开始是在下载的sdk里找demo,后面发现下载mvs(海康的客户端)的安装... 针对视频播放的可以参见H264播放器编程指南。它里面用到如下方法获取 BOOL PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); SDK版本: CH-HCNetSDK(Linux)4.0.2.7 OpenCv:2.2.0 将控制台演示代码的 GetStream.cpp 覆盖为以下,就能转换成 IplImage 内存数据,IplImage *img 是YUV格式,IplImage *imgBgr 是BGR格式: 系列博客———————-海康威视摄像头+OpenCV+VS2017 图像处理小结(二)本系列博客记载博主用海康威视网络摄像头以及OpenCV库和VS2017开发环境搭建 视频处理工程 的过程,主要是海康威视摄像头与电脑的有线与无线连接,视频流数据的获取以及格式转换,开发环境以及三方库的的配置, 多线程处理转码后的图像帧的相关步骤,并且给出了一个简单的实时人脸检测例程。第一篇主要介绍海康摄像头的... 1、海康威视摄像头+OpenCV+VS2017 图像处理小结(一 详细描述了相机的型号、配置软件 2、海康威视摄像头+OpenCV+VS2017 图像处理小结(二) 讲述了工程目录构建和配置:
// Start grab image nRet = MV_CC_StartGrabbing(handle); if (MV_OK != nRet) printf("Start Grabbing fail! nRet [0x%x]\n", nRet); break; MV_FRAME_OUT stImageInfo = {0}; memset(&stImageInfo, 0, sizeof(MV_FRAME_OUT)); unsigned char * pData = (unsigned char *)malloc(sizeof(unsigned char) * (g_nPayloadSize)); if (pData == NULL) printf("Allocate memory failed.\n"); break; 1.7 停止采集
1.7 停止采集
// Stop grab image nRet = MV_CC_StopGrabbing(handle); if (MV_OK != nRet) printf("Stop Grabbing fail! nRet [0x%x]\n", nRet); break; 1.8 关闭相机并摧毁句柄 // Close device nRet = MV_CC_CloseDevice(handle); if (MV_OK != nRet) printf("ClosDevice fail! nRet [0x%x]\n", nRet); break; // Destroy handle nRet = MV_CC_DestroyHandle(handle); if (MV_OK != nRet) printf("Destroy Handle fail! nRet [0x%x]\n", nRet); break; 二、OpenCV相关操作 在RawDataFormatConvert中,最主要的功能是将连续采集的图片,从相机的缓冲区域转化OpenCV的Mat格式,并在屏幕上显示,因此我们可以利用Mat格式调用OpenCV的相关操作。 while (true) clock_t startTime, endTime; startTime = clock(); nRet = MV_CC_GetImageBuffer(handle, &stImageInfo, 1000); if (nRet == MV_OK) printf("Get One Frame: Width[%d], Height[%d], nFrameNum[%d]\n", stImageInfo.stFrameInfo.nWidth, stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nFrameNum); printf("No data[0x%x]\n", nRet); free(pData); pData = NULL; break; cv::Mat srcImage; srcImage = cv::Mat(stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nWidth, CV_8UC1, stImageInfo.pBufAddr); cv::namedWindow("srcImage", 0); cv::resizeWindow("srcImage", 918, 768); cv::imshow("srcImage", srcImage); cv::waitKey(1); srcImage.release(); nRet = MV_CC_FreeImageBuffer(handle, &stImageInfo); endTime = clock(); std::cout << "Run Time:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl; std::cout<< std::endl; 根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。 三、运行结果 运行结果如图所示: public MyCamera myCamera;//相机对象 MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; IntPtr m_BufForDriver = IntPtr.Zero; private static O... 文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程。在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项的缺失,无法运行dll,有大哥有其他办法的加群交流。01—大华SDK帮助类介绍,这里做了个dll的帮助类,把相机基本功能都写进去了:枚举-实例化-相机连接-回调取图-触发设置-曝光调试等-关闭相机;其... 工控机主要应用与视觉检测!相机网线及工控机网口都是千兆的!设置完巨帧数和速度与双工(选择为全双工),显示速度低与1GB,不能够正常工作。C.LA-Properdes-Advanced-将RecerveBuffers更改为2048。E.LAN-属性-电源管理-取消选中允许计算机关闭此设备以保存电源。这种情况均为MVS设置不熟悉,可参照如下设置优化相应端口相机配置。D.局域网-属性-高级-将传输缓冲区更改为20484。B.LAN-属性-高级-将中断记录部分更改为执行。A.关闭采集控制帧速率控制。 1.不会转换格式先找demo 开发海康相机sdk联合opencv的时候,格式转换问题搞了整整一天,一开始不知道如何将抓图得到的数据转成opencv的Mat格式用于图像处理,于是开始找海康自带的demo和开发手册,在这里也建议最好看第一时间就看开发手册及自带demo。我一开始是在下载的sdk里找demo,后面发现下载mvs(海康的客户端)的安装... 针对视频播放的可以参见H264播放器编程指南。它里面用到如下方法获取 BOOL PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); SDK版本: CH-HCNetSDK(Linux)4.0.2.7 OpenCv:2.2.0 将控制台演示代码的 GetStream.cpp 覆盖为以下,就能转换成 IplImage 内存数据,IplImage *img 是YUV格式,IplImage *imgBgr 是BGR格式: 系列博客———————-海康威视摄像头+OpenCV+VS2017 图像处理小结(二)本系列博客记载博主用海康威视网络摄像头以及OpenCV库和VS2017开发环境搭建 视频处理工程 的过程,主要是海康威视摄像头与电脑的有线与无线连接,视频流数据的获取以及格式转换,开发环境以及三方库的的配置, 多线程处理转码后的图像帧的相关步骤,并且给出了一个简单的实时人脸检测例程。第一篇主要介绍海康摄像头的... 1、海康威视摄像头+OpenCV+VS2017 图像处理小结(一 详细描述了相机的型号、配置软件 2、海康威视摄像头+OpenCV+VS2017 图像处理小结(二) 讲述了工程目录构建和配置:
// Stop grab image nRet = MV_CC_StopGrabbing(handle); if (MV_OK != nRet) printf("Stop Grabbing fail! nRet [0x%x]\n", nRet); break; 1.8 关闭相机并摧毁句柄
1.8 关闭相机并摧毁句柄
// Close device nRet = MV_CC_CloseDevice(handle); if (MV_OK != nRet) printf("ClosDevice fail! nRet [0x%x]\n", nRet); break; // Destroy handle nRet = MV_CC_DestroyHandle(handle); if (MV_OK != nRet) printf("Destroy Handle fail! nRet [0x%x]\n", nRet); break; 二、OpenCV相关操作 在RawDataFormatConvert中,最主要的功能是将连续采集的图片,从相机的缓冲区域转化OpenCV的Mat格式,并在屏幕上显示,因此我们可以利用Mat格式调用OpenCV的相关操作。 while (true) clock_t startTime, endTime; startTime = clock(); nRet = MV_CC_GetImageBuffer(handle, &stImageInfo, 1000); if (nRet == MV_OK) printf("Get One Frame: Width[%d], Height[%d], nFrameNum[%d]\n", stImageInfo.stFrameInfo.nWidth, stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nFrameNum); printf("No data[0x%x]\n", nRet); free(pData); pData = NULL; break; cv::Mat srcImage; srcImage = cv::Mat(stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nWidth, CV_8UC1, stImageInfo.pBufAddr); cv::namedWindow("srcImage", 0); cv::resizeWindow("srcImage", 918, 768); cv::imshow("srcImage", srcImage); cv::waitKey(1); srcImage.release(); nRet = MV_CC_FreeImageBuffer(handle, &stImageInfo); endTime = clock(); std::cout << "Run Time:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl; std::cout<< std::endl; 根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。 三、运行结果 运行结果如图所示: public MyCamera myCamera;//相机对象 MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; IntPtr m_BufForDriver = IntPtr.Zero; private static O... 文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程。在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项的缺失,无法运行dll,有大哥有其他办法的加群交流。01—大华SDK帮助类介绍,这里做了个dll的帮助类,把相机基本功能都写进去了:枚举-实例化-相机连接-回调取图-触发设置-曝光调试等-关闭相机;其... 工控机主要应用与视觉检测!相机网线及工控机网口都是千兆的!设置完巨帧数和速度与双工(选择为全双工),显示速度低与1GB,不能够正常工作。C.LA-Properdes-Advanced-将RecerveBuffers更改为2048。E.LAN-属性-电源管理-取消选中允许计算机关闭此设备以保存电源。这种情况均为MVS设置不熟悉,可参照如下设置优化相应端口相机配置。D.局域网-属性-高级-将传输缓冲区更改为20484。B.LAN-属性-高级-将中断记录部分更改为执行。A.关闭采集控制帧速率控制。 1.不会转换格式先找demo 开发海康相机sdk联合opencv的时候,格式转换问题搞了整整一天,一开始不知道如何将抓图得到的数据转成opencv的Mat格式用于图像处理,于是开始找海康自带的demo和开发手册,在这里也建议最好看第一时间就看开发手册及自带demo。我一开始是在下载的sdk里找demo,后面发现下载mvs(海康的客户端)的安装... 针对视频播放的可以参见H264播放器编程指南。它里面用到如下方法获取 BOOL PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); SDK版本: CH-HCNetSDK(Linux)4.0.2.7 OpenCv:2.2.0 将控制台演示代码的 GetStream.cpp 覆盖为以下,就能转换成 IplImage 内存数据,IplImage *img 是YUV格式,IplImage *imgBgr 是BGR格式: 系列博客———————-海康威视摄像头+OpenCV+VS2017 图像处理小结(二)本系列博客记载博主用海康威视网络摄像头以及OpenCV库和VS2017开发环境搭建 视频处理工程 的过程,主要是海康威视摄像头与电脑的有线与无线连接,视频流数据的获取以及格式转换,开发环境以及三方库的的配置, 多线程处理转码后的图像帧的相关步骤,并且给出了一个简单的实时人脸检测例程。第一篇主要介绍海康摄像头的... 1、海康威视摄像头+OpenCV+VS2017 图像处理小结(一 详细描述了相机的型号、配置软件 2、海康威视摄像头+OpenCV+VS2017 图像处理小结(二) 讲述了工程目录构建和配置:
在RawDataFormatConvert中,最主要的功能是将连续采集的图片,从相机的缓冲区域转化OpenCV的Mat格式,并在屏幕上显示,因此我们可以利用Mat格式调用OpenCV的相关操作。
while (true) clock_t startTime, endTime; startTime = clock(); nRet = MV_CC_GetImageBuffer(handle, &stImageInfo, 1000); if (nRet == MV_OK) printf("Get One Frame: Width[%d], Height[%d], nFrameNum[%d]\n", stImageInfo.stFrameInfo.nWidth, stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nFrameNum); printf("No data[0x%x]\n", nRet); free(pData); pData = NULL; break; cv::Mat srcImage; srcImage = cv::Mat(stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nWidth, CV_8UC1, stImageInfo.pBufAddr); cv::namedWindow("srcImage", 0); cv::resizeWindow("srcImage", 918, 768); cv::imshow("srcImage", srcImage); cv::waitKey(1); srcImage.release(); nRet = MV_CC_FreeImageBuffer(handle, &stImageInfo); endTime = clock(); std::cout << "Run Time:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl; std::cout<< std::endl; 根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。 三、运行结果 运行结果如图所示: public MyCamera myCamera;//相机对象 MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; IntPtr m_BufForDriver = IntPtr.Zero; private static O... 文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程。在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项的缺失,无法运行dll,有大哥有其他办法的加群交流。01—大华SDK帮助类介绍,这里做了个dll的帮助类,把相机基本功能都写进去了:枚举-实例化-相机连接-回调取图-触发设置-曝光调试等-关闭相机;其... 工控机主要应用与视觉检测!相机网线及工控机网口都是千兆的!设置完巨帧数和速度与双工(选择为全双工),显示速度低与1GB,不能够正常工作。C.LA-Properdes-Advanced-将RecerveBuffers更改为2048。E.LAN-属性-电源管理-取消选中允许计算机关闭此设备以保存电源。这种情况均为MVS设置不熟悉,可参照如下设置优化相应端口相机配置。D.局域网-属性-高级-将传输缓冲区更改为20484。B.LAN-属性-高级-将中断记录部分更改为执行。A.关闭采集控制帧速率控制。 1.不会转换格式先找demo 开发海康相机sdk联合opencv的时候,格式转换问题搞了整整一天,一开始不知道如何将抓图得到的数据转成opencv的Mat格式用于图像处理,于是开始找海康自带的demo和开发手册,在这里也建议最好看第一时间就看开发手册及自带demo。我一开始是在下载的sdk里找demo,后面发现下载mvs(海康的客户端)的安装... 针对视频播放的可以参见H264播放器编程指南。它里面用到如下方法获取 BOOL PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); SDK版本: CH-HCNetSDK(Linux)4.0.2.7 OpenCv:2.2.0 将控制台演示代码的 GetStream.cpp 覆盖为以下,就能转换成 IplImage 内存数据,IplImage *img 是YUV格式,IplImage *imgBgr 是BGR格式: 系列博客———————-海康威视摄像头+OpenCV+VS2017 图像处理小结(二)本系列博客记载博主用海康威视网络摄像头以及OpenCV库和VS2017开发环境搭建 视频处理工程 的过程,主要是海康威视摄像头与电脑的有线与无线连接,视频流数据的获取以及格式转换,开发环境以及三方库的的配置, 多线程处理转码后的图像帧的相关步骤,并且给出了一个简单的实时人脸检测例程。第一篇主要介绍海康摄像头的... 1、海康威视摄像头+OpenCV+VS2017 图像处理小结(一 详细描述了相机的型号、配置软件 2、海康威视摄像头+OpenCV+VS2017 图像处理小结(二) 讲述了工程目录构建和配置:
while (true) clock_t startTime, endTime; startTime = clock(); nRet = MV_CC_GetImageBuffer(handle, &stImageInfo, 1000); if (nRet == MV_OK) printf("Get One Frame: Width[%d], Height[%d], nFrameNum[%d]\n", stImageInfo.stFrameInfo.nWidth, stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nFrameNum); printf("No data[0x%x]\n", nRet); free(pData); pData = NULL; break; cv::Mat srcImage; srcImage = cv::Mat(stImageInfo.stFrameInfo.nHeight, stImageInfo.stFrameInfo.nWidth, CV_8UC1, stImageInfo.pBufAddr); cv::namedWindow("srcImage", 0); cv::resizeWindow("srcImage", 918, 768); cv::imshow("srcImage", srcImage); cv::waitKey(1); srcImage.release(); nRet = MV_CC_FreeImageBuffer(handle, &stImageInfo); endTime = clock(); std::cout << "Run Time:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl; std::cout<< std::endl; 根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。
根据上述代码,我们将ImageBuffer区域的数据转化为Mat格式,并且根据CV_8UC1格式,可知图像应为灰度图,这要与相机图像格式对应。
三、运行结果 运行结果如图所示: public MyCamera myCamera;//相机对象 MyCamera.MV_CC_DEVICE_INFO_LIST m_pDeviceList; IntPtr m_BufForDriver = IntPtr.Zero; private static O... 文章讲的是C#调用大华相机SDK,通过回调事件获取图片并转换成visionpro的Icogimage格式,文章底部会分享例程。在调用SDK之前,需要先安装大华的相机软件到C盘,不安装到C盘会显示依赖项的缺失,无法运行dll,有大哥有其他办法的加群交流。01—大华SDK帮助类介绍,这里做了个dll的帮助类,把相机基本功能都写进去了:枚举-实例化-相机连接-回调取图-触发设置-曝光调试等-关闭相机;其... 工控机主要应用与视觉检测!相机网线及工控机网口都是千兆的!设置完巨帧数和速度与双工(选择为全双工),显示速度低与1GB,不能够正常工作。C.LA-Properdes-Advanced-将RecerveBuffers更改为2048。E.LAN-属性-电源管理-取消选中允许计算机关闭此设备以保存电源。这种情况均为MVS设置不熟悉,可参照如下设置优化相应端口相机配置。D.局域网-属性-高级-将传输缓冲区更改为20484。B.LAN-属性-高级-将中断记录部分更改为执行。A.关闭采集控制帧速率控制。 1.不会转换格式先找demo 开发海康相机sdk联合opencv的时候,格式转换问题搞了整整一天,一开始不知道如何将抓图得到的数据转成opencv的Mat格式用于图像处理,于是开始找海康自带的demo和开发手册,在这里也建议最好看第一时间就看开发手册及自带demo。我一开始是在下载的sdk里找demo,后面发现下载mvs(海康的客户端)的安装... 针对视频播放的可以参见H264播放器编程指南。它里面用到如下方法获取 BOOL PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); SDK版本: CH-HCNetSDK(Linux)4.0.2.7 OpenCv:2.2.0 将控制台演示代码的 GetStream.cpp 覆盖为以下,就能转换成 IplImage 内存数据,IplImage *img 是YUV格式,IplImage *imgBgr 是BGR格式: 系列博客———————-海康威视摄像头+OpenCV+VS2017 图像处理小结(二)本系列博客记载博主用海康威视网络摄像头以及OpenCV库和VS2017开发环境搭建 视频处理工程 的过程,主要是海康威视摄像头与电脑的有线与无线连接,视频流数据的获取以及格式转换,开发环境以及三方库的的配置, 多线程处理转码后的图像帧的相关步骤,并且给出了一个简单的实时人脸检测例程。第一篇主要介绍海康摄像头的... 1、海康威视摄像头+OpenCV+VS2017 图像处理小结(一 详细描述了相机的型号、配置软件 2、海康威视摄像头+OpenCV+VS2017 图像处理小结(二) 讲述了工程目录构建和配置:
运行结果如图所示: