[问题保存笔记]基于halcon开发的模板匹配的软件问题

14 篇文章 10 订阅

1、在使用相机抓图时,相机第一次触发,没有图像。一开始怀疑软件触发后,去取图,可能相机并没准备好,因此加sleep延时,也没解决。不知道什么原因。

代码流程:

        CameraSetSnapMode(0, CAMERA_SNAP_TRIGGER);
	int m_width = 0, m_height = 0, len = 0;
	CameraGetImageSize(0, &m_width, &m_height);
	CameraGetImageBufferSize(0, &len, CAMERA_IMAGE_BMP);
	unsigned char*	m_inBuf = new unsigned char[len];
	dataRed = new unsigned char[len];
	dataGreen = new unsigned char[len];
	dataBlue = new unsigned char[len];
	CameraTriggerShot(0);                        //相机触发
	sleep(5000);				     //延时
	if (CameraQueryImage(0, m_inBuf, &len,
		CAMERA_IMAGE_RGB24) == API_OK)
	{
		for (int i = 0; i < m_height; i++)
		{
			for (int j = 0; j < m_width; j++)
			{
				memcpy(dataRed + m_width*i + j, m_inBuf + 3 * i*m_width + 3 * j, sizeof(unsigned char));
				memcpy(dataGreen + m_width*i + j, m_inBuf + 3 * i*m_width + 3 * j + 1, sizeof(unsigned char));
				memcpy(dataBlue + m_width*i + j, m_inBuf + 3 * i*m_width + 3 * j + 2, sizeof(unsigned char));
			}
		}
		GenImage3Extern(&Image, "byte", m_width, m_height, (Hlong)(dataRed), (Hlong)(dataGreen), (Hlong)(dataBlue), 0);
		DispObj(Image, m_hWndID);
	}
后来在相机sdk上 CameraTriggerShot() 是有返回值的,用来判断是否触发。于是增加了对CameraTriggerShot操作的判断

if(CameraTriggerShot(0)==API_OK)
{
      if (CameraQueryImage(0, m_inBuf, &len,
		CAMERA_IMAGE_RGB24) == API_OK)
	{
		........
	}
}

2、这个问题比较诡异,第一次开自动运行线程,程序判断结果能正确显示出来。当停止自动线程后,再打开,执行结果就无法正确显示出来了,把形状模板不知道显示到哪个窗口了。这里用的是halcon自动生成的函数

void dev_display_shape_matching_results(HTuple hv_ModelID, HTuple hv_Color, HTuple hv_Row,HTuple hv_Column, HTuple hv_Angle,

                                                                                 HTuple hv_ScaleR, HTuple hv_ScaleC, HTuple hv_Model)

函数体内用的是DispObj(ho_ContoursAffinTrans, m_hWnd);  m_hWnd同程序其他位置的变量是一样的,都是类的变量。调整过很多方法,全局变量,静态变量,全局函数,类的静态函数,全局函数。都不好解决这个问题。

无意中找到了halcon另两算子

vector_angle_to_rigid (0, 0, 0, RowCheck, ColumnCheck, AngleCheck, MovementOfObject)
affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MovementOfObject)

解决了这个问题。

  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值