Ara*_*san 5 python opencv numpy histogram scikit-image
我正在使用并且熟悉cv2,今天我正在尝试使用skimage。
我试图使用 skimage和读取图像cv2。看来他们都完美地解读了图像。但是,当我绘制图像的直方图但读取不同的库(skimage和cv2)时,直方图显示出显着差异。
有人可以帮助我解释直方图之间的区别吗?
我的代码:
import cv2
import skimage.io as sk
import numpy as np
import matplotlib.pyplot as plt
path = '../../img/lenna.png'
img1 = sk.imread(path, True)
img2 = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
print(img1.shape)
print(img2.shape)
plt.subplot(2, 2, 1)
plt.imshow(img1, cmap='gray')
plt.title('skimage read')
plt.xticks([])
plt.yticks([])
plt.subplot(2, 2, 2)
plt.imshow(img2, cmap='gray')
plt.title('cv2 read')
plt.xticks([])
plt.yticks([])
plt.subplot(2, 2, 3)
h = np.histogram(img1, 100)
plt.plot(h[0])
plt.title('skimage read histogram')
plt.subplot(2, 2, 4)
h = np.histogram(img2, 100)
plt.plot(h[0])
plt.title('cv2 read histogram')
plt.show()
Run Code Online (Sandbox Code Playgroud)
文本输出:
(512, 512) (512, 512)
输出:
编辑:
这是输入图像:

小智 5
这两个imread函数只是读取图像的默认格式不同。标准skimage.io使用的是 64 位浮点数,而cv2标准似乎是无符号字节。
您可以通过转换img1为无符号字节格式来看到这一点。
import skimage as skk
img1 = skk.img_as_ubyte(img1)
Run Code Online (Sandbox Code Playgroud)
现在您将得到一些相似的直方图。它们并不完全相同,因为它们最初被读取为不同的格式。