• 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

  • 相关阅读:
    Less的用法
    有关cookie的内容
    有关BOM(Browser Object Model)的内容
    JSON的相关内容
    css3实现菜单栏选中时的过渡效果
    原生JavaScript实现jQuery的hasClass,removeClass,addClass,toggleClass
    JavaScript实现多个菜单的显示隐藏(JavaScript实现二级/三级菜单的显示隐藏)
    用css控制table td内文字超出隐藏
    Centos查看端口占用令
    mysql 远程访问不行解决方法 Host is not allowed to connect to this MySQL server
  • 原文地址:https://www.cnblogs.com/xixixing/p/16650915.html
Copyright © 2020-2023  润新知