Я новичок в этом деле обнаружения изображений, я смотрел видео на YouTube и пытался создать программу, которая обнаруживает изображение, чтобы я мог автоматизировать некоторую рыбалку в игре. НО я продолжаю получать эту ошибку: каждый раз, когда я указываю правильный путь к файлу изображения, я продолжаю получать вывод «Нет». Может кто-нибудь помочь мне с этим, пожалуйста?
from numpy import asarray
from mss import mss
import cv2
import time
import pyautogui
import imageio.v3 as iio
import os
import shutil
def vision():
cords = (400,400,1100,400)
mark = cv2.imread("D:\\Python\\New folder\\apple.png")
print(cv2.imshow("OpenCV Image",mark))
while True:
vision()
Мой скриншот вывода:
ожидал, что изображение будет прочитано, но когда я вспоминаю его, оно не работает.
Вам нужно вызвать waitKey()
после imshow()
.
print(cv2.imshow(...))
вы получаете None
.
для этого вообще не требуется imshow для минимально воспроизводимого примера. просто imread и утверждение, что результат не None
@ChristophRackwitz Я даже не уверен, что изображение, возвращенное из imread
(mark
), здесь отсутствует. Я думаю, что «Нет», которое мы видим в терминале, связано с тем, что ОП пытается print
получить «результат» imshow
.
в самом заголовке написано imread()
, но в коде это не рассматривается... вместо этого речь идет о imshow()
... запутанном вопросе.
Внесли небольшие изменения в ваш код, чтобы он стал работоспособным.
Что происходило:
cv2.imshow(...)
ничего не возвращает. Таким образом, если вы попытаетесь обернуть его в печать, вы увидите в терминале «Нет». Итак, изображение было обработано cv2
, но на выходе вы увидели только None
. Попробуйте заменить print(cv2.imshow(..))
на cv2.imshow(..)
.vision
несколько раз в цикле while
. Это вызвало печать None
несколько раз. Не уверен, что это то, что вы хотели сделать, я бы предложил устранить этот цикл.cv2.imgshow(..)
нужно дополнительно вызвать cv2.waitKey(...)
, при этом на экране появится изображение.import cv2
flag_vision = False
def vision():
cords = (400,400,1100,400)
mark = cv2.imread("D:\\Python\\New folder\\apple.png")
cv2.imshow("OpenCV Image",mark)
cv2.waitKey(0)
while True:
if not flag_vision:
# prevents function `vision` from running multiple times.
vision()
flag_vision = True
вы говорите так, будто думаете, что imread() всегда должен возвращать None («Итак, изображение было обработано cv2»). это неверно. Похоже, вы, мягко говоря, не знакомы с этой частью OpenCV. ваш ответ не решает проблему imread()
не чтения файла (т. е. вместо этого возвращает None). перефразирование вопроса или улучшение кода не является ответом. за этот ответ не следовало голосовать.
Спасибо за комментарий. 1) Я не говорил, что imread
возвращает None. 2) Я сказал, что imshow
ничего не возвращает. Вы можете увидеть это из подсказок по вводу функций. 3) Я проверил, какую ошибку вернет cv2.imshow
, если путь к изображению неверен. И если путь неверен, cv2.imshow
не возвращается None
и вызывает исключение. 4) Я не прошу Вас проголосовать за мой ответ или принять его. Надеюсь, это прояснит ответ.
вы абсолютно правы. виноват. Мне жаль. Я невнимательно прочитал и принял ваше упоминание imshow
за imread
.
Привет, не могли бы вы показать сообщение об ошибке? Что именно вы подразумеваете под «не могу вспомнить изображение»?