Baumer相机BGAPI SDK Demo软件去连接JPEG-650M相机进行采图时,发现图像显示为一条灰色条状图像(C++),联合OpenCV进行图像转换显示

简介: Baumer相机BGAPI SDK Demo软件去连接JPEG-650M相机进行采图时,发现图像显示为一条灰色条状图像(C++),联合OpenCV进行图像转换显示

项目场景:

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


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


特殊环境类项目,使用高速高稳定以及高防护的并自带JPEG图像压缩算法的Baumer相机作为相机主体,使用内置JPEG算法的相机可以保证图像质量的前提下提高图像传输速度。


相机型号:VLXN-650M.I.JP


问题描述:

使用JPEG-650M相机进行开发时,使用Baumer China提供的标准Demo-CPP软件进行测试时,发现显示图像为一条灰色条纹图像,无法显示相机实际采集的图像。


d23ee7cb068149a8bdc780b233233498.png


原因分析:

Baumer JPEG系列工业相机的内部图像数据为霍夫曼流动图像。


正常Demo-CPP显示的图像为正常原始数据图像,需要经过转译解码后才能显示为正常图像。


霍夫曼流动图像显示为灰色图像,因为它代表了流动模式的灰度渲染。


在这种类型的可视化中,灰色的强度对应于局部速度或流速。


较暗的区域表示较低的流速,而较亮的区域表示较高的流速。


这种灰度表示法允许以简单直观的方式对复杂的流体流动进行轻松的可视化和分析。


解决方案:

Baumer GAPI SDK中目前暂无直接转霍夫曼流为图像的函数,


但是有提供将霍夫曼流通过流文件的方式保存为本地图片的函数,


若需要解码霍夫曼流并显示图像,需要采用第三方库进行,如Opencv等,


通过opencv的解码后将图像转为Mat后再转为bitmap,即可正常显示图像在Demo-CPP中;


下面我们关联C++的opencv环境


这里的路径已经设置好,安装的opencv环境为opencv3.4.1  需要的文件如下面所示  然后添加合适的头文件,opencv环境就安装ok    


包含目录:D:\OPENCV\opencv3.4.1\build\include  


库目录:D:\OPENCV\opencv3.4.1\build\x64\vc14\lib


#include <opencv2/core/core.hpp>   
#include <opencv2/highgui/highgui.hpp>  
#include<opencv2\opencv.hpp>        
#pragma comment(lib, "opencv_world341.lib")  
#pragma comment(lib, "opencv_world341d.lib")        
#pragma region 内存JPEG数据转换为opencv里的jpeg
char* image_buffer = (char *)((bo_uint64)(pBufferFilled->GetMemPtr()) + pBufferFilled->GetImageOffset());
int image_length = (int)pBufferFilled->GetImageLength();
cv::Mat * imgbuf = new cv::Mat(cv::Size(1, image_length), CV_8UC1, (char *)image_buffer);
cv::Mat imOriginal = cv::imdecode(*imgbuf, CV_LOAD_IMAGE_GRAYSCALE);
#pragma endregion
//方法【1】原图像格式转换[mat转unsigned char]                       
unsigned char *imagebuffer2 = imOriginal.data;
//方法【2】原图像格式转换[mat转unsigned char]                       
int image_size = imOriginal.cols * imOriginal.rows;
unsigned char* imageData = new unsigned char[image_size];
int a = 0;
for (int i = 0;i<imOriginal.rows;i++)
{
            for (int j = 0;j<imOriginal.cols;j++)
            {
                        imageData[a]= imOriginal.at<uchar>(i, j);
                        a++;
            }
}
#pragma region//通过流文件的方式将JPEG的数据保存为jpg文件,但是这种操作是无法将数据转为内存bitmap的,转换需要第三方软件如opencv
std::ofstream outfile;
outfile.open(strpath, std::ios_base::binary);            
outfile.write(reinterpret_cast<const char*>(pBufferFilled->GetMemPtr()) + jpeg_start_offset2, jpeg_end_offset2 - jpeg_start_offset2);
#pragma endregion
#pragma region//Mat保存图片功能
CString  strpath2 = pDlg->m_strDirectory+strtime+"Mat.jpg";
cv::String cvstrpath = W2A(strpath2);
cv::imwrite(cvstrpath,imOriginal);
#pragma endregion


霍夫曼图像优点

霍夫曼图像,也被称为霍夫曼调制对比度图像,具有以下特点。


1. 它们是通过一种专门的技术产生的,该技术增强了透明或半透明的标本,如细胞或组织的对比度。

2. 由于调制对比技术产生的阴影,它们具有三维的外观。

3. 它们可以显示出传统明场或相位对比显微镜难以看到的精细细节。

4. 它们对研究活细胞特别有用,因为该技术不需要对细胞进行染色或固定。

5. 它们可以用专门的光学仪器和软件来捕捉,并经常用于生物研究和医疗诊断。

目录
相关文章
|
21天前
|
安全 定位技术 API
婚恋交友系统匹配功能 婚恋相亲软件实现定位 语音社交app红娘系统集成高德地图SDK
在婚恋交友系统中集成高德地图,可实现用户定位、导航及基于地理位置的匹配推荐等功能。具体步骤如下: 1. **注册账号**:访问高德开放平台,注册并创建应用。 2. **获取API Key**:记录API Key以备开发使用。 3. **集成SDK**:根据开发平台下载并集成高德地图SDK。 4. **配置功能**:实现定位、导航及基于位置的匹配推荐。 5. **注意事项**:保护用户隐私,确保API Key安全,定期更新地图数据,添加错误处理机制。 6. **测试优化**:完成集成后进行全面测试,并根据反馈优化功能。 通过以上步骤,提升用户体验,提供更便捷的服务。
|
3月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
765 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
3天前
|
负载均衡 算法 安全
探秘:基于 C++ 的局域网电脑控制软件自适应指令分发算法
在现代企业信息化架构中,局域网电脑控制软件如同“指挥官”,通过自适应指令分发算法动态调整指令发送节奏与数据量,确保不同性能的终端设备高效运行。基于C++语言,利用套接字实现稳定连接和线程同步管理,结合实时状态反馈,优化指令分发策略,提升整体管控效率,保障网络稳定,助力数字化办公。
37 19
|
4月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
63 4
|
21天前
|
算法 安全 C++
用 C++ 算法控制员工上网的软件,关键逻辑是啥?来深度解读下
在企业信息化管理中,控制员工上网的软件成为保障网络秩序与提升办公效率的关键工具。该软件基于C++语言,融合红黑树、令牌桶和滑动窗口等算法,实现网址精准过滤、流量均衡分配及异常连接监测。通过高效的数据结构与算法设计,确保企业网络资源优化配置与安全防护升级,同时尊重员工权益,助力企业数字化发展。
39 4
|
7月前
|
消息中间件 存储 开发工具
消息队列 MQ产品使用合集之C++如何使用Paho MQTT库进行连接、发布和订阅消息
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
5月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
WK
|
5月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
160 1
|
5月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
376 1