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();
目录
相关文章
|
4月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
55 0
|
4月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
29 0
|
4月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
36 0
|
27天前
|
开发工具 对象存储 Android开发
对象存储oss使用问题之C++使用OSS SDK时遍历OSS上的文件时崩溃如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
29 0
|
15小时前
|
计算机视觉
OpenCV图像阈值
OpenCV图像阈值
4 0
|
15小时前
|
计算机视觉 Python
OpenCV为图像扩边(填充)
OpenCV为图像扩边(填充)
4 0
|
14天前
|
计算机视觉 Python
轻松掌握opencv的8种图像变换
轻松掌握opencv的8种图像变换
|
15天前
|
算法 计算机视觉
【OpenCV】- 图像修复
【OpenCV】- 图像修复
|
15天前
|
Serverless 计算机视觉
【OpenCV】-图像的矩
【OpenCV】-图像的矩
|
15天前
|
编解码 物联网 计算机视觉
【OpenCV】—图像金子塔与图片尺寸缩放
【OpenCV】—图像金子塔与图片尺寸缩放