Baumer堡盟工业相机BGAPI SDK联合OpenCV进行图像转换三(C++)

简介: Baumer堡盟工业相机BGAPI SDK联合OpenCV进行图像转换三(C++)

堡盟相机支持Mono8、Mono12、BGR8等多种像素格式(PixelFormat)——每种格式需对应相应的OpenCV格式。与堡盟相机像素格式对应的OpenCV矩阵类型如下表所示。

df143b7eabaf43c68fb89f96ff42e516.png

从如下示例可以看出,可直接处理像素格式的图像,无需转换,非常简单。

示例:Mono8


pDevice->GetRemoteNode("PixelFormat")->SetString("Mono8");
BGAPI2::Buffer * pBufferFilled = pDataStream->GetFilledBuffer(1000);
if (pBufferFilled->GetPixelFormat() == "Mono8")
{
  cv::Mat* imOriginal = new cv::Mat((int)pBufferFilled->GetHeight(),
                                   (int)pBufferFilled->GetWidth(),
                                   CV_8UC1,
                                   (char *)pBufferFilled->GetMemPtr();
  cv::imwrite("cv_Mono8_image.png", *imOriginal);
  delete imOriginal;
}
pBufferFilled->QueueBuffer();

示例:BGR8

OpenCV中标准的颜色像素格式为BGR,每个颜色通道为8位(CV_8UC3)。相机中与之对应的像素格式设为BGR8(也可以设为BGR8Packed)。

pDevice->GetRemoteNode("PixelFormat")->SetString("BGR8");
BGAPI2::Buffer * pBufferFilled = pDataStream->GetFilledBuffer(1000);
if ((pBufferFilled->GetPixelFormat() == "BGR8") || 
    (pBufferFilled->GetPixelFormat() == "BGR8Packed"))
{
  cv::Mat* imOriginal = new cv::Mat((int)pBufferFilled->GetHeight(),
                                   (int)pBufferFilled->GetWidth(),
                                   CV_8UC3,
                                   (char *)pBufferFilled->GetMemPtr();
  cv::imwrite("cv_BGR8_image.png", *imOriginal);
  delete imOriginal;
}
pBufferFilled->QueueBuffer();

将像素格式转换为16位OpenCV矩阵

某些相机支持12位像素格式(Mono12、RGB12)。将数据储存在16位OpenCV矩阵类型中会导致输出图像比预期暗很多。为了将12位像素格式转换成16位OpenCV矩阵,堡盟GAPI缓冲区中的数据需要通过OpenCV ConvertTo()函数平移4位(或乘以16)。


同样地,Mono10等10位像素格式可以通过将数据平移2位(或乘以64)进行转换。


警告:由于一个指针刚被传输到堡盟GAPI缓冲区的数据中,初始数据已经被更改。


pDevice->GetRemoteNode("PixelFormat")->SetString("Mono12");
BGAPI2::Buffer * pBufferFilled = pDataStream->GetFilledBuffer(1000);
if (pBufferFilled->GetPixelFormat() == "Mono12")
{
  cv::Mat* imOriginal = new cv::Mat((int)pBufferFilled->GetHeight(),
                                   (int)pBufferFilled->GetWidth(),
                                   CV_16UC1,
                                   (char *)pBufferFilled->GetMemPtr();
  imOriginal.ConvertTo(imOriginal, Emgu.CV.CvEnum.DepthType.Cv16U, 64.0);
  cv::imwrite("cv_Mono12_as_Mono16_image.png", *imOriginal);
  delete imOriginal;
}
pBufferFilled->QueueBuffer();
目录
相关文章
|
6月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
87 0
|
6月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
58 0
|
3月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
155 1
|
6月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
70 0
|
6月前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
65 0
|
5天前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
24 7
|
3月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
156 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
3月前
|
Dart 开发工具 Android开发
Android Studio导入Flutter项目提示Dart SDK is not configured
Android Studio导入Flutter项目提示Dart SDK is not configured
237 4
|
3月前
|
开发工具 Android开发
Flutter: Android SDK not found at this location,Android Studio not found at xxx
Flutter: Android SDK not found at this location,Android Studio not found at xxx
145 2