我有RGB格式的位图,即每像素24位。我如何创建一个Mat对象,以便我可以最小化数据复制,同时确保正确处理通道的顺序,因为OpenCV中的默认顺序是BGR
答案 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顺序的事实主要是输入/输出问题(基本上是imshow
,imread
,imwrite
等。
如果您需要切换色彩空间,可以随时使用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