• Basler相机Bayer格式转Qt RGB888


    【推荐养成的习惯】

    1、函数返回bool

    2、函数内优先判断参数是否存在可用

    3、使用try  catch

    【正题】

    无论什么品牌的相机,Bayer转RGB都涉及到插值,因此建议使用官方SDK里的函数进行转换。针对Basler相机,代码如下:

    bool BaslerCamera::toQImage(const CGrabResultPtr& ptrGrabResult, QImage& OutImage)    //输出型参数用&修饰,因为它是要被改变的。
    {    
        if (ptrGrabResult ==NULL)    //判断是否存在
        {
            return false;
        }
        try
        {
            int width = static_cast<int>(ptrGrabResult->GetWidth());
            int height = static_cast<int>(ptrGrabResult->GetHeight());
            if (ptrGrabResult->GetPixelType() == Pylon::PixelType_Mono8)
            {
                uchar* buffer = (uchar*)ptrGrabResult->GetBuffer();
                OutImage = QImage(buffer, width, height, QImage::Format_Grayscale8).copy();//深拷贝,防止 QPixmap::fromImage(img)访问冲突
            }
            else //bayer格式等
            {
                try
                {
                    CImageFormatConverter   fc;
                    fc.OutputPixelFormat = PixelType_RGB8packed;//通过官方函数先转为 RGB8
                    CPylonImage tempImg, copyImg;
                    
                    //方式一:
                    //fc.Convert(tempImg, ptrGrabResult);            
                    //uchar* buffer = (uchar*)tempImg.GetBuffer();
    
                    //方式二:
                    tempImg.AttachGrabResultBuffer(ptrGrabResult);
                    fc.Convert(copyImg, tempImg);                //此函数可能失败,因此放到try中            
                    uchar* buffer = (uchar*)copyImg.GetBuffer();
                    
                    OutImage = QImage(buffer, width, height, QImage::Format_RGB888).copy();
                }
                catch (const Pylon::GenericException& e)
                {
                    qDebug() << "官方函数格式转换失败" + QString(e.GetDescription());
                    return false;
                }
            }
        }
        catch (const Pylon::GenericException& e)
        {
            qDebug() << "失败" + QString(e.GetDescription());
            return false;
        }    
    
        return true;
    }

    【注意】

    ptrGrabResult的转换、获取(先清空再存数据)会有访问冲突,注意这两个位置要加锁。

    【多余的话】

    官方有下图函数,但是貌似没用。因此使用 CImageFormatConverter

  • 相关阅读:
    Nginx 静态站点配置不对导致301跳转的坑
    Prometheus(一):Web服务环境监控
    10BASE-T
    计算机网络之物理层:7、物理层设备(中继器、集线器)
    广域网
    转载------对比网络模拟器软件——Cisco Packet Tracer、华为eNSP、H3C Cloud Lab
    二、Python的使用
    MobSF移动安全扫描平台本地化部署与简单汉化
    MobSF移动安全扫描平台环境搭建与试用
    BSTestRunner增加历史执行记录展示和重试功能
  • 原文地址:https://www.cnblogs.com/xixixing/p/16650915.html
Copyright © 2020-2023  润新知