skimage.io.imread 对比 cv2.imread

skimage.io.imread Versus cv2.imread

我正在使用并熟悉 cv2,今天我尝试使用 skimage

我正在尝试使用 skimagecv2 读取图像。看起来他们都完美地阅读了图像。但是当我绘制图像的直方图但阅读不同的库(skimagecv2)时,直方图显示出显着差异。

谁能帮我解释一下直方图之间的区别?

我的代码:

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()

文本输出:

(512, 512)
(512, 512)

输出:



编辑:

这是输入图像:

这两个 imread 函数只是读取图像的默认格式不同。 skimage.io 标准使用 64 位浮点数,而 cv2 标准似乎是无符号字节。
您可以通过将 img1 转换为无符号字节格式来查看。

import skimage as skk
img1 = skk.img_as_ubyte(img1)

现在你会得到一些相似的东西 histograms.They 并不完全相同,因为它们最初被读取为不同的格式。