51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

C++ 下 Halcon 与 OpenCV 图像的转换

Halcon 中的图像数据结构为 HImage, OpenCV 中的图像为 Mat,使用中经常需要相互转换的情况,本文记录转换方式。

转换规则 {#转换规则}

halcon、opencv 和 C++图像内存数据处理机制有差异,在进行相互转换的时候需要注意内存数据排列问题,否则可能出现花图或者多出黑边等现象。

  • Halcon 的 HImage 和 OpenCV 的 Mat 都是连续存储图像数据的,HImage 存储数据是每个通道的数据存在一起的, Mat 的数据是一个像素点中的多个通道数据连续存在一起的。
  • 单通道图像如果位深度一致可以直接复制内存,如果多通道则需要按照图像的存储规则重新整理。

HImage to Mat {#HImage-to-Mat}

8 bit 深度图像 {#8-bit-深度图像}

  • 当图像为 8 bit 单通道普通图像时,Mat 图像在内存中各个像素连续排列,像素存在的顺序和 HImage 一致,可以直接拷贝内存:
  • 当图像为多通道图像时,OpenCV 的 Mat 图像内存仍然是连续的,HImage 是多个单通道图像的组合,因此内存组织上有些区别,需要逐个像素整理
示例代码 {#示例代码}

其他深度图像 {#其他深度图像}

  • 当图像深度不为 8 bits 时,Mat 图像为连续的内存,HImage 图像仍为多个通道单独处理内存的情况,内存拷贝时需要注意转换前后的图像的位深度一致
示例代码 {#示例代码-2}

Mat to HImage {#Mat-to-HImage}

  • 图像转换逻辑和 HImage 转 Mat 是一致的,直接上示例代码
示例代码 {#示例代码-3}

参考资料 {#参考资料}



文章链接:
https://www.zywvvd.com/notes/coding/halcon/halcon-opencv-conv/halcon-opencv-conv/

赞(0)
未经允许不得转载:工具盒子 » C++ 下 Halcon 与 OpenCV 图像的转换