为什么我的图像显示为灰色方块?

时间:2019-04-09 23:29:48

标签: python image opencv

我正在用Python为我的图像处理类编写脚本,该脚本应读取图像目录并显示它们,然后最终我将添加其他代码以对这些图像执行Otsu阈值处理。我可以获取参考图像以正确显示以包括Otsu阈值;但是,尝试在目录中显示其余图像时遇到麻烦。我不确定要从目录中正确读取我的图像,因为我试图将它们存储在数组中;但是,我可以看到输出窗口显示与实际图像分辨率的尺寸相对应的灰色方块,这表明它们至少已被部分正确地读取。

我已经尝试隔离脚本以加载图像并将其显示在单独的文件中并运行它。我担心成功处理示例图像(包括黑白二值化)会在以后影响我的图像显示。事实并非如此,因为运行单独的脚本会产生相同的灰色正方形输出。

****更新****

我设法调整了以下脚本(尚未更新)以使其几乎可以正常运行。通过直接为每个文件编写完整的文件路径,我可以使输出正确显示。最好将图像加载到数组中似乎存在一些问题;将来测试的一种可能的解决方法是将文件位置导入为字符串数组,并实现该位置与将图像直接加载到数组中。

import cv2 as cv
import numpy as np
from PIL import Image
import glob
from matplotlib import pyplot as plot
import time

image=cv.imread('Fig ref.jpg')

image2=cv.cvtColor(image, cv.COLOR_RGB2GRAY)
cv.imshow('Image', image)
# global thresholding
ret1,th1 = cv.threshold(image2,127,255,cv.THRESH_BINARY)
# Otsu's thresholding
ret2,th2 = cv.threshold(image2,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
# Otsu's thresholding after Gaussian filtering
blur = cv.GaussianBlur(image2,(5,5),0)
ret3,th3 = cv.threshold(blur,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)
# plot all the images and their histograms
images = [image2, 0, th1,
          image2, 0, th2,
          blur, 0, th3]
titles = ['Original Noisy Image','Histogram','Global Thresholding     (v=127)',
      'Original Noisy Image','Histogram',"Otsu's Thresholding",
      'Gaussian filtered Image','Histogram',"Otsu's Thresholding"]
for i in range(3):
    plot.subplot(3,3,i*3+1),plot.imshow(images[i*3],'gray')
    plot.title(titles[i*3]), plot.xticks([]), plot.yticks([])
    plot.subplot(3,3,i*3+2),plot.hist(images[i*3].ravel(),256)
    plot.title(titles[i*3+1]), plot.xticks([]), plot.yticks([])
    plot.subplot(3,3,i*3+3),plot.imshow(images[i*3+2],'gray')
    plot.title(titles[i*3+2]), plot.xticks([]), plot.yticks([])
plot.show()

imageFolderPath = 'D:\Google Drive\Engineering\Senior Year\Image     processing\Image processing group work'
imagePath = glob.glob(imageFolderPath + '/*.JPG') 

im_array = np.array( [np.array(Image.open(img).convert('RGB')) for img in imagePath] )
temp=cv.imread("D:\Google Drive\Engineering\Senior Year\Image processing\Image processing group work\Fig ref.jpg")


cv.imshow('image', temp)
time.sleep(15)

for i in range(9):
    cv.imshow('Image', im_array[i])


    time.sleep(2)

1 个答案:

答案 0 :(得分:0)

plot.subplot(3,3,i*3+3),plot.imshow(images[i*3+2],'gray'):第二个参数表示您使用gray色彩映射。摆脱它,您将获得彩色显示。