Почему мои изображения отображаются серыми квадратами? - PullRequest
1 голос
/ 10 апреля 2019

Я пишу скрипт на 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 голосов
/ 10 апреля 2019

plot.subplot(3,3,i*3+3),plot.imshow(images[i*3+2],'gray'): Второй аргумент говорит, что вы используете gray карту цветов.Избавьтесь от этого, и вы получите цветные дисплеи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...