OpenCV - cvtColor 不改变颜色空间,它改变颜色
OpenCV - cvtColor does not change colorspace, it changes colors
我正在尝试使用 OpenCV 3.1.0 和 C++ 遵循这个 Python 示例:http://docs.opencv.org/3.1.0/df/d9d/tutorial_py_colorspaces.html#gsc.tab=0.
我在使用 cvtColor() 函数时遇到了一些问题,因为它改变了我的图像的颜色,而不是它的色彩空间。我有这个代码:
Mat original_image;
original_image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // The image is passed as arg
if (!original_image.data)
{
printf("Problem!\n");
return -1;
}
// From BGR to HSV
Mat hsv_image(original_image.rows, original_image.cols, original_image.type());
cvtColor(original_image, hsv_image, CV_BGR2HSV);
imwrite("hsv_image.png", hsv_image);
original_image 是一个 CV_8UC3,与 cvtColor() 兼容,最初应该在 BGR 色彩空间中。
我用 GIMP 制作了下面的测试图像:
结果是这张图片:
我决定尝试从 BGR 到 RGB 的转换,将 BGR2HSV 更改为 BGR2RGB,并且使用相同的测试图像,我得到了这个结果
这里直接换了图片的通道就更清楚了...
有人知道这里发生了什么吗?
试试这个:
// From BGR to HSV
Mat hsv_image;
cvtColor(original_image, hsv_image, COLOR_BGR2HSV);
imwrite("hsv_image.png", hsv_image);
函数 imwrite
不关心垫子的颜色 space 并且不存储此信息。根据文档,它是 BGR 命令。
所以在保存图像之前你应该确定它是 BGR。
如果您真的想将图像保存为 HSV,请使用 file storages
我正在尝试使用 OpenCV 3.1.0 和 C++ 遵循这个 Python 示例:http://docs.opencv.org/3.1.0/df/d9d/tutorial_py_colorspaces.html#gsc.tab=0.
我在使用 cvtColor() 函数时遇到了一些问题,因为它改变了我的图像的颜色,而不是它的色彩空间。我有这个代码:
Mat original_image;
original_image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // The image is passed as arg
if (!original_image.data)
{
printf("Problem!\n");
return -1;
}
// From BGR to HSV
Mat hsv_image(original_image.rows, original_image.cols, original_image.type());
cvtColor(original_image, hsv_image, CV_BGR2HSV);
imwrite("hsv_image.png", hsv_image);
original_image 是一个 CV_8UC3,与 cvtColor() 兼容,最初应该在 BGR 色彩空间中。
我用 GIMP 制作了下面的测试图像:
结果是这张图片:
我决定尝试从 BGR 到 RGB 的转换,将 BGR2HSV 更改为 BGR2RGB,并且使用相同的测试图像,我得到了这个结果
这里直接换了图片的通道就更清楚了...
有人知道这里发生了什么吗?
试试这个:
// From BGR to HSV
Mat hsv_image;
cvtColor(original_image, hsv_image, COLOR_BGR2HSV);
imwrite("hsv_image.png", hsv_image);
函数 imwrite
不关心垫子的颜色 space 并且不存储此信息。根据文档,它是 BGR 命令。
所以在保存图像之前你应该确定它是 BGR。
如果您真的想将图像保存为 HSV,请使用 file storages