问题是当我需要将它转换为HSV时,CV_BGR2HSV和CV_RGB2HSV给我不同的结果:所以我真的需要知道打开时的颜色顺序是什么,imread或者如何强制imread以任何特定的顺序打开图像.

alr*_*kai 15
用于imread状态的OpenCV文档默认情况下,对于3通道彩色图像,数据以BGR顺序存储,例如在Mat中,数据存储为1D无符号字符指针,使得索引处的任何给定颜色像素px_idx为3个元素按顺序,用[px_idx + 0]:蓝色通道,[px_idx + 1]绿色通道,[px_idx + 2]红色通道
注意在彩色图像的情况下,解码图像将以BGR顺序存储通道.
您可以通过传递给它的flag参数对颜色类型进行一些(有限的)控制imread,但是您不能指定通道顺序(您应该假设所有颜色图像都是BGR)
CV_LOAD_IMAGE_ANYDEPTH - 如果置位,则在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位.
CV_LOAD_IMAGE_COLOR - 如果设置,则始终将图像转换为颜色
CV_LOAD_IMAGE_GRAYSCALE - 如果设置,则始终将图像转换为灰度图像
或者更简单地说,
>0 Return a 3-channel color image.(与CV_LOAD_IMAGE_COLOR相同)
=0 Return a grayscale image.(与CV_LOAD_IMAGE_GRAYSCALE相同)
<0 Return the loaded image as is (with alpha channel).(与CV_LOAD_IMAGE_ANYDEPTH相同)
你在使用图像显示imshow()吗?
imshow()实际上不知道颜色空间并将图像打印为BGR,即使您将它们转换为另一种格式.这就是你得到奇怪结果的原因.
为了说服自己,尝试将图像从RGB转换为BGR并使用它进行打印imshow(),然后通过从BGR转换为RGB来执行相同的操作:
cv::cvtColor(src, dst, CV_RGB2BGR);
imshow("RGB2BGR", dst);
cv::cvtColor(src, dst, CV_BGR2RGB);
imshow("BGR2RGB", dst);
Run Code Online (Sandbox Code Playgroud)
然后,您的示例证明将BGR图像转换为HSV 将不会产生与将RGB图像转换为HSV相同的矩阵.
| 归档时间: |
|
| 查看次数: |
12649 次 |
| 最近记录: |