我目前正在使用 Basler 相机 acA1300-30gc 开发机器视觉应用程序。为此,我正在使用 Basler Pylon 4 和 OPENCV 版本 2.4.9,但出现了一些问题。我正在尝试使用 Pylon SDK 捕获图像并将其转换为 Mat 格式以供进一步分析。由于处理时间限制,我的目标是避免将图像保存到硬盘驱动器,而是即时分析它。
在下面的代码中,我尝试捕获图像,将其转换为 Mat 格式并将其显示在新窗口上,但我得到的窗口是空白的。如果有人可以帮助我找出我的错误,或者解释我如何以不同的方式实现我的目标,我将非常感激。 (我可能应该补充一点,相机工作正常,并且我已经能够将图像保存到硬盘)。
Thanks.
这是我的代码:
PylonAutoInitTerm autoInitTerm;
try
{
CInstantCamera camera( CTlFactory::GetInstance().CreateFirstDevice());
cout << "Dispositivo usado:"<<camera.GetDeviceInfo().GetModelName()<<endl;
CGrabResultPtr ptrGrabResult;
camera.GrabOne(500,ptrGrabResult,TimeoutHandling_ThrowException);
if(ptrGrabResult->GrabSucceeded())
{
CPylonImage target;
CImageFormatConverter converter;
converter.OutputPixelFormat=PixelType_RGB8packed;
converter.OutputBitAlignment=OutputBitAlignment_MsbAligned;
converter.Convert(target,ptrGrabResult);
Mat image(target.GetWidth(),target.GetHeight(),CV_8UC1,target.GetBuffer(),Mat::AUTO_STEP);
if(image.empty())
{
cout << "No se pudo cargar la imagen Mat" << endl;
return -1;
}
cout << "La imagen se presenta en la ventana *Captura*" << endl;
namedWindow("Captura",WINDOW_AUTOSIZE);
imshow( "Captura", image );
}
else
{
cout<<"Error: "<<ptrGrabResult->GetErrorCode()<<" "<<ptrGrabResult->GetErrorDescription()<<endl;
}
}
您必须确保像素类型匹配。在您的代码示例中您使用PixelType_RGB8packed
对于相机图像,以及CV_8UC1
作为 Mat 像素类型。你应该使用CV_8UC3
反而。我也会用PixelType_BGR8packed
代替PixelType_RGB8packed
,因为 BGR 与 Windows 位图兼容。我假设您使用 Windows。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)