gpt4 book ai didi

image-processing - 使用从缓冲区复制的图像更改 cv::Mat 会影响原始图像

转载 作者:行者123 更新时间:2023-12-02 16:47:34 25 4
gpt4 key购买 nike

我有 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);

这可行,但是当我检查原始图像时,它的 channel 也被反转(因此它们变得错误),我不希望这种情况发生。

我想反转 mat channel 下单 image-data (我的图像缓冲区)不变。我怎样才能做到这一点?

最佳答案

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

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

关于image-processing - 使用从缓冲区复制的图像更改 cv::Mat 会影响原始图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com