Baumer工业相机堡盟工业相机如何通过BGAPISDK的函数转换示Bayer格式为BGR8格式彩色图像(C++)

简介: Baumer工业相机堡盟工业相机如何通过BGAPISDK的函数转换示Bayer格式为BGR8格式彩色图像(C++)

Baumer工业相机

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。


Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。

Baumer工业相机中彩色工业相机可以集成Bayer滤镜从而产生Bayer格式的彩色图像,通常用于色彩准确性和差异性很重要的场合,如产品检验或质量控制。


Baumer工业相机的Bayer彩色图像的技术背景

拜尔彩色图像是由许多工业相机产生的一种数字图像类型。它们是以1976年发明拜尔滤镜的布莱斯-拜尔命名的。拜尔滤光片是一个彩色滤光片阵列,由交替排列的红、绿、蓝滤光片组成,以特定的模式排列在相机传感器上。当光线通过滤光片时,它被用来创建一个数字图像。


拜尔滤镜的工作原理是为传感器上的每个像素捕捉一种颜色。由于每个像素只能捕捉一种颜色,相机必须对其他像素的颜色进行插值。这是用一种去马赛克算法完成的,该算法使用邻近像素的信息来估计缺失的颜色信息。


由此产生的图像是一个由红、绿、蓝像素组成的马赛克,每个像素只包含一个颜色通道的信息。为了创建一个全彩图像,相机软件将来自相邻像素的颜色信息结合起来,产生一个具有准确颜色表现的最终图像。


拜尔彩色图像在工业相机中被广泛使用,因为它们以最小的数据处理要求提供高质量的彩色图像。然而,插值过程会引入伪影并降低图像清晰度,特别是在使用低质量相机或放大图像尺寸时。


Baumer工业相机通过BGAPI SDK在回调函数里显示Bayer彩色图像

Baumer彩色工业相机集成Bayer彩色图像功能,下面介绍在C++里Baumer彩色工业相机Bayer格式图像显示的方式


Baumer工业相机在BufferEvent转换Bayer格式为BGR8格式彩色图像

Baumer工业相机BGAPI SDK的图像处理库中提供了可以将Bayer图像格式转换为合适适用的BRG8彩色格式的图像算法。


彩色相机支持BayerBG8、BayerGB8、BayerGR8和BayerRG8等原始像素格式。


如需进一步进行图像处理,必须将这些格式转换为BGR8格式。


在回调函数里转换Bayer格式为BGR8格式彩色图像,C++调用代码如下所示:

// CALLBACK FUNCTION
// ==================
void BGAPI2CALL BufferHandler(void * callBackOwner, BGAPI2::Buffer * pBufferFilled) {
    std::cout << "[callback of " << ((BGAPI2::DataStream *) callBackOwner)->GetParent()->GetModel() << "] ";  // device
    try {
        if (pBufferFilled == NULL) {
            std::cout << "Error: Buffer Timeout after 1000 msec" << std::endl;
        } 
        else if (pBufferFilled->GetIsIncomplete() == true) 
        {
            std::cout << "Error: Image is incomplete" << std::endl;
            // queue buffer again
            pBufferFilled->QueueBuffer();
        } 
        else 
        {
          BGAPI2.Image pImage = null;
    BGAPI2.Image pTransformImage = null;
            BGAPI2::Buffer * pBufferFilled = NULL;
    //通过图像数据生成BGAPI2.Image pImage图像
    pImage = imgProcessor->CreateImage( (bo_uint)pBufferFilled->GetWidth(), 
    (bo_uint)(int)pBufferFilled->GetHeight(), 
    pBufferFilled->GetPixelFormat(), 
    pBufferFilled->GetMemPtr(), 
    pBufferFilled->GetMemSize() );
    // Get the information of the image object.
    // 获取生成后图像的数据
    std::cout << "pImage.Pixelformat: " << pImage->GetPixelformat() << std::endl;
    std::cout << "pImage.Width: " << pImage->GetWidth() << std::endl;
    std::cout << "pImage.Height: " << pImage->GetHeight() << std::endl;
    std::cout << "pImage.Buffer: " << pImage->GetBuffer() << std::endl;
    //彩色相机像素格式BayerBG8、BayerGB8、BayerGR8和BayerRG8
    if(pImage->GetPixelformat()=="Bayer")
    {
    //使用ImageProcessor转换Bayer图像转换位BGR8标准彩色图像
    pTransformImage = imgProcessor->CreateTransformedImage(pImage, "BGR8");
    // Get the information of the transformed image object.
    // 重新获取转换后的图像的各类信息
    std::cout << "pTransformImage.Pixelformat: " << pTransformImage->GetPixelformat();
    std::cout << std::endl;
    std::cout << "pTransformImage.Width: " << pTransformImage->GetWidth() << std::endl;
    std::cout << "pTransformImage.Height: " << pTransformImage->GetHeight() << std::endl;
    std::cout << "pTransformImage.Buffer: " << pTransformImage->GetBuffer() << std::endl;
    // The transformed image data can be accessed by a new buffer pointer.
    }
    // 清除对应资源
    pImage->Release();
    pTransformImage->Release();
    delete imgProcessor;
            // queue buffer again
            pBufferFilled->QueueBuffer();
        }
    }
    catch (BGAPI2::Exceptions::IException& ex) {
        std::cout << "ExceptionType:    " << ex.GetType() << std::endl;
        std::cout << "ErrorDescription: " << ex.GetErrorDescription() << std::endl;
        std::cout << "in function:      " << ex.GetFunctionName() << std::endl;
    }
    return;
}

Baumer工业相机使用Bayer图像格式的原因

高图像质量: 拜尔格式通过利用红、绿、蓝像素的模式,可以捕捉到高质量的彩色图像。


成本效益高: 使用带有拜尔滤光片模式的单一图像传感器可以降低摄像系统的成本,并简化硬件设计。


高效的数据处理: 拜尔格式可以通过压缩存储和处理彩色图像所需的数据量来实现高效的数据处理。


与主流图像处理软件兼容: 拜尔格式被主流图像处理软件广泛支持,使其更容易与现有系统合作和整合。


灵活的图像采集: 拜尔格式允许灵活的图像采集,在图像采集过程中提供调整色彩平衡、曝光和对比度的选项。


Baumer彩色工业相机使用Bayer图像格式的优势

高质量的彩色图像: 拜尔模式可以拍摄高质量的彩色图像,因为它可以实现平滑的色彩过渡。


成本效益高: 拜尔格式被广泛使用,在大多数工业相机上都有,这使它成为一个具有成本效益的选择。


减少了数据存储: 拜尔格式减少了图像中的数据量,这有助于降低数据存储要求。


与普通软件的兼容性: 这种格式很容易被普通图像软件读取,减少了对专门软件的需求。


高速成像: 由于数据要求的减少,以拜耳格式采集图像的相机可以以更高的速度运行。


总的来说,拜尔格式是在工业环境中采集高质量彩色图像的一种可靠、高效和经济的方式。


Baumer彩色工业相机使用Bayer图像格式的行业应用

拜耳图像格式通常用于彩色工业相机,包括机器视觉、质量控制、成像光谱学、机器人和医疗诊断等各种应用。


在机器视觉和质量控制中,使用拜耳图像格式的彩色工业相机被用来识别和检查缺陷,按颜色分类产品,并检测颜色变化。


在成像光谱学中,这些相机被用来分析和测量材料和物体的颜色和光线光谱,这在农业、地质学和环境科学等领域很有用。


在机器人方面,彩色工业相机被用于物体识别和跟踪,以及导航和绘图。


在医疗诊断方面,彩色工业相机用于在实验室环境中对生物组织、细胞和其他样品进行成像和分析。


总的来说,使用拜耳图像格式的彩色工业相机的行业应用是广泛而多样的,并随着技术的发展而继续扩大。

目录
相关文章
|
4月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
357 0
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
111 4
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
88 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
45 0
|
2月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
39 3
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
399 1
|
2月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
51 1
|
2月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
26 3
|
2月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
70 0
C++入门6——模板(泛型编程、函数模板、类模板)