[問題保存筆記]基於halcon開發的模板匹配的軟件問題

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)

解決了這個問題。

  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章