2012-08-30 76 views
0

我有24位RGB格式的图像缓冲区。该缓冲区使用更改从缓冲区复制的图像cv :: Mat影响原始图像

cv::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

在颜色转换之前硬拷贝矩阵还是cv :: cvtColor(mat,mat2,CV_RGB2BGR); ? –

+0

我不这么认为。它会对性能造成太大影响吗? – perr0

回答

5

我假设(我不确定)如果您使用cv::cvtColor(mat, mat, CV_RGB2BGR);,您实际上会重新创建垫子,但是您会使用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 

,而不是覆盖,你写入新的数据。这应该承担相同的性能成本... 我不知道在颜色转换后对图像有什么计划,但即使性能不同,它也可能会产生较小的影响。

相关问题