需要访问OpenCV图像底层数据时应选择哪种格式?
OpenCL访问OpenCV彩色图像底层数据方案
推荐选用的彩色格式
优先选择CV_8UC3(3通道8位无符号BGR格式),如果需要透明通道可选择CV_8UC4(4通道8位无符号BGRA格式)。OpenCV默认彩色通道排列为BGR顺序,不是常见的RGB顺序,写代码时注意不要搞反通道顺序导致颜色异常。
底层数据排列规则
和你之前使用的CV_8U单通道格式相比,仅每个像素占用的字节数和偏移计算逻辑有差异:
CV_8U单通道:每个像素占1字节,坐标(x,y)的内存偏移为y * step + x。你之前写的y*width +x仅在图像无行对齐填充、step等于width时生效,建议统一用OpenCV的step属性计算偏移,避免部分分辨率下图像错位。CV_8UC3三通道:每个像素占3字节,坐标(x,y)的三个通道偏移分别为:- B通道:
y * step + x * 3 + 0 - G通道:
y * step + x * 3 + 1 - R通道:
y * step + x * 3 + 2
- B通道:
CV_8UC4四通道:每个像素占4字节,坐标(x,y)的四个通道偏移分别为:- B通道:
y * step + x * 4 + 0 - G通道:
y * step + x * 4 + 1 - R通道:
y * step + x * 4 + 2 - A通道:
y * step + x * 4 + 3
- B通道:
代码修改示例
如果需要给(x,y)像素赋值纯红色(BGR组合为B=0、G=0、R=255),使用CV_8UC3时写法如下:
A[y * step + x * 3 + 0] = 0; A[y * step + x * 3 + 1] = 0; A[y * step + x * 3 + 2] = 255;
如果你的场景可以确保图像无行对齐填充,也可以直接用width替换上述代码中的step。
内容的提问来源于stack exchange,提问作者Fransebas
相关产品推荐
相关产品推荐

