OpenCV使用的默认(Pixel)存储格式是什么?
我知道它是BGR但它是BGR32吗? BGR16? 它是Packed还是Planar?
你能建议我找到它的方法吗?
感谢您的帮助。
[编辑]背景:实际上我正在尝试将OpenCV与另一个名为MIL(Matrox Imaging Library)的库一起使用。我需要使用MIL获取图像,然后将其转换为OpenCV图像。这就是为什么我需要知道默认像素格式,以配置MIL。
答案 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();