使用RGB格式的现有缓冲区创建Mat对象的最有效方法?

时间:2016-06-07 23:27:26

标签: opencv

我有RGB格式的位图,即每像素24位。我如何创建一个Mat对象,以便我可以最小化数据复制,同时确保正确处理通道的顺序,因为OpenCV中的默认顺序是BGR

2 个答案:

答案 0 :(得分:1)

通常,您可以像往常一样使用RGB顺序,只需记住在需要时转换为正确的颜色空间。

您可以使用以下命令创建一个没有副本的Mat标题:

int rows = ...
int cols = ...
uchar* rgb_buffer = ...

cv::Mat3b rgb_image(rows, cols, bgr_buffer);

OpenCV函数中没有(或只有几个)假设矩阵数据应该是BGR或RGB顺序。您还可以使用RGB订单的自定义处理来处理数据。

OpenCV图像处于BGR顺序的事实主要是输入/输出问题(基本上是imshowimreadimwrite等。

如果您需要切换色彩空间,可以随时使用cvtColor(..., RGB2<whatever>)转换图像。这不会成为性能问题,因为无论如何都会复制数据。

答案 1 :(得分:0)

RGB缓冲区: 整数行,整数列,uchar * input_RGB;

垫缓冲区声明: 底图(行,列,CV_8UC3,input_RGB);

https://docs.opencv.org/master/d6/d6d/tutorial_mat_the_basic_image_container.html