Анализ изображений с Roipoly.Получение ValueError - PullRequest
0 голосов
/ 26 сентября 2018

Я пытался использовать RoiPoly , чтобы нарисовать область интереса и найти среднее значение серого в пикселях внутри области интереса на изображении.Тем не менее, я получаю следующую ошибку:

Traceback (most recent call last):
  File "example.py", line 22, in <module>
    ROI1.displayMean(img)
  File "/home/ruven/Downloads/Rupesh images/roipoly.py", line 74, in displayMean
    mask = self.getMask(currentImage)
  File "/home/ruven/Downloads/Rupesh images/roipoly.py", line 48, in getMask
    ny, nx = np.shape(currentImage)
ValueError: too many values to unpack

Это мой код:

import pylab as pl
from roipoly import roipoly 

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

# create image
img=mpimg.imread('5.jpg')


# show the image
pl.imshow(img, interpolation='nearest', cmap="Greys")
pl.colorbar()
pl.title("left click: line segment         right click: close region")

# let user draw first ROI
ROI1 = roipoly(roicolor='r') #let user draw first ROI

# show the image with the first ROI
pl.imshow(img, interpolation='nearest', cmap="Greys")
pl.colorbar()
ROI1.displayROI()
ROI1.displayMean(img)
'''
# show the image with both ROIs and their mean values
pl.imshow(img, interpolation='nearest', cmap="Greys")
pl.colorbar()
ROI1.displayMean(img)
pl.title('The ROI')
pl.show()
'''
# show ROI masks
pl.imshow(ROI1.getMask(img),
          interpolation='nearest', cmap="Greys")
pl.title('ROI masks of ROI')
pl.show()

И это изображение: введите описание изображения здесь

Это ROI: enter image description here

Я также открыт для других методов использования ROI для определения среднего значения серого в пикселях

1 Ответ

0 голосов
/ 27 сентября 2018

Ошибка, которую вы видите, связана с тем, что ваш вход является 3-канальным изображением (RGB), а не 1 каналом.Поэтому, когда roipoly пытается распаковать фигуру, она пытается уместить 3 значения в 2 переменные.

Это должно быть исправлено путем преобразования 3-канального изображения в 1-канальное.Вот один из способов:

# create image
img = mpimg.imread('5.jpg')

print(img.shape)   # (992, 1024, 3)
img = img[:,:,0]
print(img.shape)   # (992, 1024)

Или вы можете прочитать этот q / answer для других методов:

...