【发布时间】:2018-06-25 05:03:54
【问题描述】:
例如,我创建
Mat mat1 = Mat::zeros(Size(100, 100), CV_8UC3);
并用 (0, 255, 255) 填充每个像素,在 hsv 中应该是红色的。
但是,如果我显示这个垫子,它将被打印为 BGR 图像并且不是红色的。
如何使这个 mat hsv 格式和设置 (0, 255, 255) 变成红色?
【问题讨论】:
标签: c++ opencv rgb hsv opencv3.1
例如,我创建
Mat mat1 = Mat::zeros(Size(100, 100), CV_8UC3);
并用 (0, 255, 255) 填充每个像素,在 hsv 中应该是红色的。
但是,如果我显示这个垫子,它将被打印为 BGR 图像并且不是红色的。
如何使这个 mat hsv 格式和设置 (0, 255, 255) 变成红色?
【问题讨论】:
标签: c++ opencv rgb hsv opencv3.1
imshow 假定您传递给它的图像在 BGR 颜色空间中。但是,您可以创建一个小函数来处理您的 imshow 的 HSV 图像。
void imshowHSV(std::string& name, cv::Mat& image)
{
cv::Mat hsv;
cv:cvtColor(image, hsv, CV_HSV2BGR);
cv::imshow(name, hsv);
}
但要小心!这将转换并创建图像的副本,如果你过度使用它可能会有相当多的开销:)
【讨论】:
CV_HSV2BGR? Mat 本身并不关心色彩空间,它只保存数字。我们可以放任何我们想要的东西(比如HSV)。如果imshow 将它们视为BGR 值,结果会看起来错误,因此我们将它们转换为BGR,然后将BGR 视为BGR,看起来正确。