Baumer堡盟工业相机BGAPI SDK联合OpenCV进行图像转换二(C++)

Baumer堡盟工业相机BGAPI SDK联合OpenCV进行图像转换二(C++)

Baumer堡盟工业相机SDK转OpenCV图像(C++)

本操作说明将介绍如何将图像从堡盟GAPI帧缓冲区传输至OpenCV,以便进一步处理。

首先,使用堡盟GAPI SDK设置堡盟相机,并将图像采集到内存,然后将内存中的图像传输至OpenCV,以便将其保存到硬盘上。图像传输到OpenCV后,即可根据需要使用该视觉库进一步处理图像。

将堡盟GAPI缓冲区克隆、复制并转换为OpenCV矩阵

如需获取堡盟GAPI缓冲区中数据的副本,可以使用OpenCV的Clone()、Copy()或ConvertTo()函数。复制后,可以重新对堡盟GAPI缓冲区进行排序,复制的数据也可以通过OpenCV进一步处理。

请注意,OpenCV矩阵中的信息包括图像的宽度、高度和类型(CV_8UC1、CV_8UC3、CV_16UC1、CV_16UC3),而堡盟GAPI缓冲区提供Buffer.FrameID、Buffer.PixelFormat、Buffer.XOffset、Buffer.YOffset以及数据块数据等更多有用的信息。如有必要,您还需复制如下信息。

pDevice->GetRemoteNode("PixelFormat")->SetString("Mono8");
BGAPI2::Buffer* pBufferFilled = pDataStream->GetFilledBuffer(1000);
if (pBufferFilled->GetPixelFormat() == "Mono8")
{
	cv::Mat* imOriginal = new cv::Mat((int)pBufferFilled->GetHeight(), 
	                                  (int)pBufferFilled->GetWidth(), 
	                                  CV_8UC1, 
	                                  (char *)pBufferFilled->GetMemPtr();

	//3 methods to copy
	cv::Mat imClone = imOriginal->clone();

	cv::Mat* imCopy = new cv::Mat((int)pBufferFilled->GetHeight(), 
                              (int)pBufferFilled->GetWidth(), 
                              CV_8UC1);
	imOriginal->copyTo(*imCopy);

	cv::Mat* imConvert = new cv::Mat((int)pBufferFilled->GetHeight(), 
                                 (int)pBufferFilled->GetWidth(), 
                                 CV_8UC1);

	imOriginal->convertTo(*imConvert, CV_8UC1, 1.0);

	delete imOriginal;
	pBufferFilled->QueueBuffer();

	//use copied image
	cv::imwrite("cv_image_Clone.png", imClone);
	cv::imwrite("cv_image_Copy.png", *imCopy);
	cv::imwrite("cv_image_Convert.png", *imConvert);

	delete imCopy;
	delete imConvert;
}


你可能感兴趣的:(opencv,c++,计算机视觉)