c++ - Basler Pylon 4 SDK 和 OPENCV 2.4.9,CPylonImage 到 Mat

标签 c++ opencv computer-vision

我目前正在使用 Basler 相机 acA1300-30gc 开发机器视觉应用程序。为此,我正在使用 Basler Pylon 4 和 OPENCV 2.4.9 版,但出现了一些问题。我正在尝试使用 Pylon SDK 捕获图像并将其转换为 Mat 格式以供进一步分析。由于处理时间的限制,我的目标是避免将图像保存到硬盘驱动器,而是对其进行即时分析。

在下面的代码中,我 try catch 图像,将其转换为 Mat 格式并在新窗口中显示,但我得到的窗口是空白的。如果有人可以帮助我找出我的错误,或者解释我如何以不同的方式实现我的目标,我将不胜感激。 (我可能应该补充一点,相机工作正常,我已经能够将图像保存到硬盘)。

谢谢。

这是我的代码:

    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。

关于c++ - Basler Pylon 4 SDK 和 OPENCV 2.4.9,CPylonImage 到 Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101877/

相关文章:

c++ - C++ 中的写时复制指针对象

c++,如何将字符串、整数和浮点值存储到数组中并检索存储的值

c++ - 使用 OpenCV 的目标检测项目

opencv - 如何根据图像序列计算相对比例?

c++ - 转储给定 C++ 行的汇编

c++ - OpenCV 和 Qt VideoCapture 无法在 Windows 上打开正确的摄像头

c++ - OpenCV VideoWriter 断言失败 img.cols == width && img.rows == height*3

java - 导入 opencv 以与 java 一起使用

image - 识别屏幕截图中所有出现的图像列表(在图像中查找图像)

c++ - Qt qbs 项目设置与库未找到编译错误