OpenCV 使用的默认(像素)存储格式是什么?
我知道它是 BGR 但它是 BGR32 吗?BGR16 ? 是打包的还是平面的?
你能建议我找到它的方法吗?
感谢您的帮助。
[编辑] 上下文:实际上我正在尝试将 OpenCV 与另一个名为 MIL(Matrox Imaging Library)的库一起使用。我需要使用 MIL 获取图像,然后将其转换为 OpenCV 图像。这就是为什么我需要知道默认像素格式来配置 MIL。
OpenCV 使用的默认(像素)存储格式是什么?
我知道它是 BGR 但它是 BGR32 吗?BGR16 ? 是打包的还是平面的?
你能建议我找到它的方法吗?
感谢您的帮助。
[编辑] 上下文:实际上我正在尝试将 OpenCV 与另一个名为 MIL(Matrox Imaging Library)的库一起使用。我需要使用 MIL 获取图像,然后将其转换为 OpenCV 图像。这就是为什么我需要知道默认像素格式来配置 MIL。
图像格式在您创建图像时由标志设置,例如CV_8UC3
表示 8 位像素、无符号、3 色通道。在彩色图像中,像素顺序为 BGR,数据按行顺序存储。
数据不是在像素级别打包的——它是 3 字节/像素(BGRA 是某些 GPU 调用的一个选项)。
数据可以在行级别打包,如果一行中的像素数 * 字节/像素数不是 4 的倍数,则数据将用零填充到下一个 32 位边界。调用 mat.ptr(n) 返回指向第 'n' 行开头的指针
请注意,您可以通过将数据指针从 MIL 图像传递到 cv::Mat 的 ctor 来与另一种兼容的图像格式共享内存
这取决于您管理图像的方式:例如,您是否从带有 imread 的文件中加载了它?看看 imread here,例如使用彩色 jpeg,您将拥有 3 通道格式,整体 24 位。你可以说得更详细点吗?
我不知道它是否有用,但是在将图像从 Android Bitmap(作为字节数组 RGBA8888 传递给 OpenCV)转换为 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();