OpenCV默认存储格式

时间:2013-07-03 12:32:11

标签: opencv

OpenCV使用的默认(Pixel)存储格式是什么?

我知道它是BGR但它是BGR32吗? BGR16? 它是Packed还是Planar?

你能建议我找到它的方法吗?

感谢您的帮助。

[编辑]背景:实际上我正在尝试将OpenCV与另一个名为MIL(Matrox Imaging Library)的库一起使用。我需要使用MIL获取图像,然后将其转换为OpenCV图像。这就是为什么我需要知道默认像素格式,以配置MIL。

2 个答案:

答案 0 :(得分:3)

图像格式由图标设置,例如CV_8UC3表示8位像素,无符号,3色通道。在彩色图像中,像素顺序是BGR,数据按行顺序存储。

数据未在像素级别打包 - 它是3字节/像素(BGRA是某些GPU调用的选项)。

数据可以在行级打包,如果一行中的像素数*字节数/像素数不是4的倍数,则数据用零填充到下一个32位边界。调用mat.ptr(n)返回指向第n行开头的指针

请注意,您可以通过将数据指针从MIL图像传递到cv :: Mat

的ctor,与另一种可编码图像格式共享内存

答案 1 :(得分:1)

这取决于您管理图像的方式:您是否从具有imread的文件加载它? 看一下imread here,用彩色jpeg例如你将有一个3通道格式,总共24位。你能更具体一点吗?

我不知道它是否有用,但在将Android Bitmap(传递给OpenCV作为字节数组RGBA8888)转换为OpenCV图像(BGR888)时,我遇到了类似的问题。 以下是我如何解决它。

cv::Mat orig_image1(orig_height, orig_width, CV_8UC4, image_data);   

int from_to[] = { 0, 2,  1, 1,  2, 0};    
cv::Mat image(orig_height, orig_width, CV_8UC3);   
cv::mixChannels(&orig_image1, 1, &image, 1, from_to, 3);
orig_image1.release();