【问题标题】:Pycharm does not show image preview on macOS "Big Sur" using OpenCV and Python3.9Pycharm 在使用 OpenCV 和 Python3.9 的 macOS“Big Sur”上不显示图像预览
【发布时间】:2021-04-03 01:25:41
【问题描述】:

我正在尝试在 macOS 'Big Sur' 和 Pycharm 上使用 OpenCV 和 python 编写人脸识别应用程序,但不幸的是它没有显示图像窗口/预览,也没有在控制台中显示任何错误,您可以在下面校验码:

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”安装无头,但它不起作用。

【问题讨论】:

  • headless 包肯定不会显示任何 GUI,因为 headless 意味着没有 GUI。这个问题与 Big Sur 有关吗?
  • 请发布运行脚本时控制台输出的副本。在程序末尾添加print("hello world") 以确保控制台输出确实有效。
  • @ChristophRackwitz 我已经阅读过它并且在大多数情况下安装 HEADLESS 完全解决了问题,并且控制台中没有任何显示,没有错误,没有提示,绝对没有。我在不同的地方添加了打印语句,所有这些都在控制台中打印出来了。
  • 听起来像是 MacOS 甚至 Big Sur 特有的问题。您的代码适用于其他平台。你能检查一下代码是否适用于以前版本的 MacOS、python 和两者吗?
  • @ChristophRackwitz 是的,问题似乎与 macOS 有关,但似乎我已经解决了。

标签: python opencv face-recognition


【解决方案1】:

问题似乎与macOS“Big Sur”取景系统有关,

问题可以通过以下方式解决: 1-删除我为这个特定项目创建的 python 环境 2-完全删除“自制” 3- 使用 python-3.9、OpenCV 和“pip3 install opencv-python-headless”创建了一个新的 python3-env,它可以正常工作。

【讨论】:

    【解决方案2】:

    替换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')
    

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 2021-09-07
      • 2021-03-29
      • 1970-01-01
      • 2021-12-04
      • 2021-05-18
      • 2021-06-19
      • 2021-08-04
      • 2021-05-31
      相关资源
      最近更新 更多