Pycharm не показывает предварительный просмотр изображения в macOS «Big Sur» с использованием OpenCV и Python3.9

Я пытаюсь закодировать приложение для распознавания лиц, используя OpenCV и python для macOS «Big Sur» и Pycharm, но, к сожалению, оно не показывает окно/предварительный просмотр изображения и не показывает никаких ошибок в консоли, ниже вы можете проверить код:

import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

img = cv2.imread('news.jpg')

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

face = face_cascade.detectMultiScale(gray_img,
                                     scaleFactor=1.05, minNeighbors=5)

for x, y, w, h in face:
    img = cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 3)

resized = cv2.resize(img, (int(img.shape[1]/3), int(img.shape[0]/3)))

# cv2.startWindowThread()
# cv2.namedWindow("preview")
cv2.imshow('preview', img)
cv2.waitKey(0)
cv2.destroyWindow('preview')

Я попытался добавить cv2.startWindowThread(), cv2.namedWindow("preview") и даже установить безголовый с помощью "pip3 install opencv-python-headless", но это не работает.

безголовый пакет определенно не покажет вам никакого графического интерфейса, потому что безголовый означает отсутствие графического интерфейса. эта проблема связана с Биг Сур?

Christoph Rackwitz 24.12.2020 17:48

опубликуйте копию вывода консоли при запуске вашего скрипта. добавьте print("hello world") в конце вашей программы, чтобы убедиться, что вывод консоли действительно работает.

Christoph Rackwitz 24.12.2020 17:49

@ChristophRackwitz Я читал об этом, и в большинстве случаев установка HEADLESS полностью решает проблему, и в консоли ничего не отображается, никаких ошибок, никаких подсказок, абсолютно ничего. Я добавил оператор печати в разные места, и все они были распечатаны в консоли.

Arash Khosravi 24.12.2020 22:01

звучит как проблема, характерная для MacOS или даже Big Sur. ваш код работает на других платформах. можете ли вы проверить, работает ли код на предыдущих версиях только MacOS, только на python и на обоих?

Christoph Rackwitz 25.12.2020 00:04

@ChristophRackwitz Да, похоже, проблема связана с macOS, но, кажется, я уже решил ее.

Arash Khosravi 25.12.2020 01:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
376
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, проблема связана с системой кадрирования macOS «Big Sur».

Проблема может быть решена путем: 1- удаление среды python, которую я создал для этого конкретного проекта. 2- удаление "браги" полностью 3- создал новый python3-env с python-3.9, OpenCV и «pip3 install opencv-python-headless», и это сработало.

Ответ принят как подходящий

Замените строку face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

с face_cascade = cv2.CascadeClassifier(cv2.data.haarcascade + 'haarcascade_frontalface_default.xml')

и тогда должно работать нормально

Вот окончательный код:

import cv2

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascade + 'haarcascade_frontalface_default.xml')

img = cv2.imread('news.jpg')

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

face = face_cascade.detectMultiScale(gray_img,
                                     scaleFactor=1.05, minNeighbors=5)

for x, y, w, h in face:
    img = cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 3)

resized = cv2.resize(img, (int(img.shape[1]/3), int(img.shape[0]/3)))

# cv2.startWindowThread()
# cv2.namedWindow("preview")
cv2.imshow('preview', img)
cv2.waitKey(0)
cv2.destroyWindow('preview')

Другие вопросы по теме