Функция OpenCV imshow не всегда работает должным образом

#python-3.x #opencv

#python-3.x #opencv

Вопрос:

Я пытаюсь прочитать номерной знак. Итак, я нашел это руководство:https://medium.com/programming-fever/license-plate-recognition-using-opencv-python-7611f85cdd6c

И когда я запускаю ее, cv2.imshow() не работает каждый раз. Иногда я получаю изображение, но иногда просто окно с крошечным черным прямоугольником в нем. Вот маленькое окно

 img = cv2.imread('2.jpg',cv2.IMREAD_COLOR)
img = cv2.resize(img, (640,480) )

cv2.imshow('actual', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  

Предполагается, что этот крошечный код будет работать каждый раз, если изображение существует. Но это не так.

Кто-нибудь имеет какое-либо представление об этом?

Спасибо

Комментарии:

1. После прочтения изображения может быть полезно проверить, существует mage или нет: if img is None: sys.exit("Could not read the image.") . Используйте ее перед imshow

2. Привет, спасибо за предложение, но это не устраняет проблему, потому что, если изображение не существует, OpenCV сам выдаст исключение

Ответ №1:

Ну, чтобы заставить ее работать, я изменил две вещи :

  1. Сначала у меня было cv2.namedWindow('actual', cv2.WINDOW_NORMAL)
  2. И затем я обновил, используя : pip3 install opencv

И теперь она работает каждый раз.

Ответ №2:

Попробуйте поместить destroyAllWindows в цикл, чтобы закрыть его должным образом (нажав q):

 img = cv2.imread('2.jpg',cv2.IMREAD_COLOR)
img = cv2.resize(img, (640,480) )
cv2.imshow('actual', img)
while True:
    if cv2.waitKey(1) amp; 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break
  

Комментарии:

1. Спасибо за этот быстрый ответ. Кажется, что она работает лучше, чем первые строки, которые я написал, но она все еще работает не каждый раз. Это очень странно

2. Это не отвечает на вопрос, и предложение не имеет никакого смысла