per*_*rr0 0 opencv image-processing
我有24位RGB格式的图像缓冲区.使用此缓冲区复制到cv :: Mat
cv::Mat mat = cv::Mat(image->height, image->width, CV_8UC3, image->data);
Run Code Online (Sandbox Code Playgroud)
由于此缓冲区为RGB格式,OpenCV使用BGR格式,因此我将转换mat为BGR
cv::cvtColor(mat, mat, CV_RGB2BGR);
Run Code Online (Sandbox Code Playgroud)
这是有效的,但是当我检查原始图像时,它的通道也会被反转(因此它们会出错),我不希望这种情况发生.
我想反转mat频道命令离开image-data(我的图像缓冲区)不变.我怎样才能做到这一点?
我假设(我不确定)如果你使用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
Run Code Online (Sandbox Code Playgroud)
您可以编写新数据,而不是覆盖.这应该承担相同的性能成本...我不知道在颜色转换后你的图像有什么计划,但即使性能不同,也可能会产生一个小的整体影响.