#python #image #opencv
#python #изображение #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 DriveEngineeringSenior YearImage processingImage 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 DriveEngineeringSenior YearImage processingImage processing group workFig ref.jpg")
cv.imshow('image', temp)
time.sleep(15)
for i in range(9):
cv.imshow('Image', im_array[i])
time.sleep(2)
Ответ №1:
plot.subplot(3,3,i*3 3),plot.imshow(images[i*3 2],'gray')
: Во втором аргументе говорится, что вы используете gray
color map. Избавьтесь от этого, и вы получите цветные дисплеи.
Комментарии:
1. разве это не должно быть просто для оттенков серого и цвета? Моя проблема в том, что единственное, что отображается, — это сплошной серый цвет, даже не изображение в сером цвете. Я скоро протестирую это, спасибо!