这几天遇到了问题就是在MFC中开发SDK,遇到了问题是:
1.回调函数中的原始图像没数据,但是图像的信息是有的
这个问题的主要原因在于海康相机的默认输出数据的格式是 YUYV ,并不是RGB的,因此需要设置一下即可,两种方式:
1.在海康相机的客户端进行修改即可:
2.使用 MV_CC_SetPixelFormat 进行设置,具体设置如下:
//设置相机图像的像素格式
unsigned int enValue = PixelType_Gvsp_RGB8_Packed;
nRet = MV_CC_SetPixelFormat(m_handle, enValue);
if (MV_OK != nRet)
{
printf ("error: SetPixelFormat fail [%x]\n", nRet);
return;
}
其实这是海康相机开发手册里面的代码,大家可以好好看看里面的代码。这个问题解决后在转换为halcon类型的图像时出问题了。
2.进行halcon图像中转换时,出现了异常,没报错,如何解决?
这个问题的出现情况是使用了halcon17 64位版本造成的,在使用GenImage3Extern()函数时会有一个警告是指针截断,如下:
这个警告不可忽视,数据产生了截断了,这个截断是导致转换异常的根本所在,具体原因是:
确保传递的是存储图像数据的实际内存地址,而不是指针变量的地址。必须注意不要截断64位体系结构上的64位指针
大家去halcon的帮助文档去搜索这个算子gen_image3_extern (Operator),里面有详细的描述。这个算子经过导出c++以后就是这个GenImage3Extern()函数。
如何解决呢?很简单,把halcon17 64位换成32位,不换行不行,我目前没找到更好的解决指针截断的方法,如果有人找到了,麻烦通知我一下,这里先谢过了呀。
换过版本后程序完美运行,只是显示有点问题,但是问题不大, 综合来看,装软件尽量装32位的吧,国内的东西都还停留在32位的居多,尤其要和硬件底层打交道的,VS也不要用太高的版本,你会发现厂家的VS大多数都是2015或者是2010。
这里基本结束了,后面继续开发,看看还会遇到哪些问题,然后在总结