OpenCV with Python - 循环阅读图像

时间:2016-08-02 21:07:25

标签: python opencv matplotlib

我使用OpenCV的imread函数将我的图像读取到Python中,以便稍后在管道中作为NumPy数组进行进一步处理。我知道OpenCV使用BGR而不是RGB,并在必要时考虑了它。但有一点让我感到困惑的是为什么我会在以下情况下获得这些不同的输出?

将图像直接读入单个图像可以正常工作。绘制的图像(使用matplotlib.pyplot)正确再现我的.tiff / .png输入。

img_train = cv2.imread('image.png')
plt.imshow(img_train)
plt.show()

enter image description here

当我在循环中使用cv2.imread时(从这些图像的目录中读取 - 这是我的最终目标),我创建了一个数组如下:

files = [f for f in listdir(mypath) if isfile(join(mypath, f))]
img_train = np.empty([len(files), height, width, channel])
for n in range(0, len(files)):
    img_train[n] = cv2.imread(join(mypath, files[n]))
plt.imshow(img_train[n])
plt.show()

enter image description here

当我尝试交叉检查并绘制由此获得的图像时,我会得到一个非常不同的输出。为什么这样?我如何纠正这一点,使它看起来更像我的输入,就像在第一种情况下一样?我是在第二种情况下正确读取数组,还是有缺陷?

否则,它是否源于Matplotlib的绘图功能?不过,我不知道如何对这种情况进行交叉检查。

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

非常简单的解决方案。 np.empty默认创建一个dtype float数组。 将此更改为uint8,就像在第一种情况下使用OpenCV一样工作正常。