本文最后更新于:2024年5月7日 下午
Halcon 中的图像数据结构为
HImage
, OpenCV 中的图像为Mat
,使用中经常需要相互转换的情况,本文记录转换方式。
转换规则
halcon、opencv 和 C++图像内存数据处理机制有差异,在进行相互转换的时候需要注意内存数据排列问题,否则可能出现花图或者多出黑边等现象。
- Halcon 的 HImage 和 OpenCV 的 Mat 都是连续存储图像数据的,HImage 存储数据是每个通道的数据存在一起的, Mat 的数据是一个像素点中的多个通道数据连续存在一起的。
- 单通道图像如果位深度一致可以直接复制内存,如果多通道则需要按照图像的存储规则重新整理。
HImage to Mat
8 bit 深度图像
- 当图像为 8 bit 单通道普通图像时,Mat 图像在内存中各个像素连续排列,像素存在的顺序和 HImage 一致,可以直接拷贝内存:
1 |
|
- 当图像为多通道图像时,OpenCV 的 Mat 图像内存仍然是连续的,HImage 是多个单通道图像的组合,因此内存组织上有些区别,需要逐个像素整理
1 |
|
示例代码
1 |
|
其他深度图像
- 当图像深度不为 8 bits 时,Mat 图像为连续的内存,HImage 图像仍为多个通道单独处理内存的情况,内存拷贝时需要注意转换前后的图像的位深度一致
示例代码
1 |
|
Mat to HImage
- 图像转换逻辑和 HImage 转 Mat 是一致的,直接上示例代码
示例代码
1 |
|
参考资料
文章链接:
https://www.zywvvd.com/notes/coding/halcon/halcon-opencv-conv/halcon-opencv-conv/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付
C++ 下 Halcon 与 OpenCV 图像的转换
https://www.zywvvd.com/notes/coding/halcon/halcon-opencv-conv/halcon-opencv-conv/