После преобразования изображения в двоичный файл не может отобразить его в блокноте с помощью matplotlib - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь отобразить изображение. После наложения изображения на двоичный файл в записной книжке Python:

resized_img = cv2.cvtColor(char_mask, cv2.COLOR_BGR2GRAY)
resized_img = cv2.threshold(resized_img, 100, 200, cv2.THRESH_BINARY)
#cv2.imwrite('licence_plate_mask3.png', char_mask)
plt.imshow(resized_img)

plt.show()

Я не могу показать изображение.Я получаю эту ошибку:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-32-0a3eb57cc497> in <module>()
      8 resized_img = cv2.threshold(resized_img, 100, 200, cv2.THRESH_BINARY)
      9 #cv2.imwrite('licence_plate_mask3.png', char_mask)
---> 10 plt.imshow(resized_img)
     11 
     12 plt.show()

C:\Anaconda3\lib\site-packages\matplotlib\pyplot.py in imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, hold, data, **kwargs)
   3155                         filternorm=filternorm, filterrad=filterrad,
   3156                         imlim=imlim, resample=resample, url=url, data=data,
-> 3157                         **kwargs)
   3158     finally:
   3159         ax._hold = washold

C:\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, *args, **kwargs)
   1895                     warnings.warn(msg % (label_namer, func.__name__),
   1896                                   RuntimeWarning, stacklevel=2)
-> 1897             return func(ax, *args, **kwargs)
   1898         pre_doc = inner.__doc__
   1899         if pre_doc is None:

C:\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in imshow(self, X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, **kwargs)
   5122                               resample=resample, **kwargs)
   5123 
-> 5124         im.set_data(X)
   5125         im.set_alpha(alpha)
   5126         if im.get_clip_path() is None:

C:\Anaconda3\lib\site-packages\matplotlib\image.py in set_data(self, A)
    590             self._A = pil_to_array(A)
    591         else:
--> 592             self._A = cbook.safe_masked_invalid(A, copy=True)
    593 
    594         if (self._A.dtype != np.uint8 and

C:\Anaconda3\lib\site-packages\matplotlib\cbook.py in safe_masked_invalid(x, copy)
   1504 
   1505 def safe_masked_invalid(x, copy=False):
-> 1506     x = np.array(x, subok=True, copy=copy)
   1507     if not x.dtype.isnative:
   1508         # Note that the argument to `byteswap` is 'inplace',

ValueError: setting an array element with a sequence.

Перед использованием порога я могу видеть изображение внутри ноутбука без проблем.Любой способ решить эту проблему?Спасибо.

1 Ответ

0 голосов
/ 12 октября 2018

Ошибка лежит в строке resized_img = cv2.threshold(resized_img, 100, 200, cv2.THRESH_BINARY).

cv2.threshold() возвращает два значения.Первое - это пороговое значение (float), а второе - изображение.

Таким образом, все время, пока вы пытались построить значение float, следовательно, Ошибка значения .

Перепишите строку следующим образом:

ret, resized_img = cv2.threshold(resized_img, 100, 200, cv2.THRESH_BINARY)

Вы также можете посмотреть в документации .

...