1 回答
TA贡献1875条经验 获得超5个赞
这里有几个问题,会导致错误的结论。
在所示(Photoshop?)屏幕截图中,色调值为51°,而不是51%。色相值范围从 0° 到 360°,参见。关于 HSV 颜色空间的Wikipedia 文章。因此,51°的色调值等于14.17%,这与所示的 MATLAB 直方图一致。
所以,错的不是 MATLAB 代码,而是 Python 代码!
OpenCV ( cv2
) 默认使用 BGR 颜色排序,因此对于img = cv2.imread(r"img.png")
,我们img
使用 BGR 颜色排序。现在,hsv_img = rgb2hsv(rgb_img)
使用,其中skimage.color.rgb2hsv
等待具有 RGB 颜色排序的图像,这会导致错误的 Python 结果。
这是一个可能的解决方法(注意,您的图表显示bins=20
):
img = cv2.imread(r"img.png")
rgb_img = img[:, :, [2, 1, 0]] # BGR to RGB
hsv_img = rgb2hsv(rgb_img)
hue_img = hsv_img[:, :, 0]
array = hue_img[np.where(hue_img > 0.1)]
plt.hist(array,bins=20) # 20 instead of 100
那将是更正的 Python 输出:
我们看到,它与 MATLAB 输出相当。
希望有帮助!
编辑:或者,使用skimage.io.imread
而不是cv2.imread
. 然后,不需要任何转换,因为skimage.io.imread
默认使用 RGB 颜色排序。
添加回答
举报