我有24位RGB格式的图像缓冲区。使用
将此缓冲区复制到cv :: Matcv::Mat mat = cv::Mat(image->height, image->width, CV_8UC3, image->data);
由于此缓冲区为RGB格式且OpenCV使用BGR格式,因此我将mat
转换为BGR
cv::cvtColor(mat, mat, CV_RGB2BGR);
这很有效,但是当我查看原始图像时,它的通道也会被反转(因此它们会出错),我不希望这种情况发生。
我想反转mat
个频道,保持image-data
(我的图像缓冲区)不变。我怎么能这样做?
答案 0 :(得分:5)
我认为(我不确定)如果您使用cv::cvtColor(mat, mat, CV_RGB2BGR);
,您实际上会重新创建mat,但是您使用RGB-> BGR转换数据覆盖数据。由于您使用指针将数据传递到“mat”,如果您覆盖mat中的数据,您也会更改“image-> data”。
因此,我认为表现不如:
cv::Mat mat = cv::Mat(image->height, image->width, CV_8UC3, image->data);
cv::Mat mat2;
cv::cvtColor(mat, mat2, CV_RGB2BGR);
//Work with mat 2 now
您可以编写新数据,而不是覆盖。这应该具有相同的性能成本...... 我不知道在颜色转换后你的图像有什么计划,但即使性能不同,它也可能会产生轻微的影响。