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(我的图像缓冲区)保持不变。我怎样才能做到这一点?

4

1 回答 1

5

我假设(我不确定)如果你使用cv::cvtColor(mat, mat, CV_RGB2BGR);,你实际上是重新创建 mat,但是你用 RGB->BGR 转换的数据覆盖数据。由于您使用指针将数据传递给“垫子”,因此如果您覆盖垫子中的数据,您也会更改“图像->数据”。

因此,我预计性能不会低于:

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

您写入新数据而不是覆盖。这应该承担相同的性能成本......我不知道你的图像在颜色转换后有什么打算,但即使性能不同,也可能对整体产生轻微影响。

于 2012-08-30T18:29:40.130 回答