【问题标题】:Python opencv running extraordinarily slowPython opencv运行异常缓慢
【发布时间】:2022-01-19 08:52:24
【问题描述】:

请记住,我对编码非常陌生,发现这非常困难,但是我打开的 cv 代码运行速度非常慢,而且我检查了任务管理器,并且 CPU 的运行速度不到其最大使用量的 10%,所以它并不缺乏处理能力。 Haar_face.xml 只是 opencv 的 haar cascade frontal face 默认值。慢的事情是一,它启动真的很慢,二,它每五秒返回大约一帧,这太慢了,我不知道为什么。任何帮助表示赞赏。

 import cv2 as cv
 while True:
    wcapture = cv.VideoCapture(0)

    ret, frame = wcapture.read()

    imgGray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    cv.destroyAllWindows()


    face_haar = cv.CascadeClassifier('haar_face.xml')

    faces_rect = face_haar.detectMultiScale(imgGray, scaleFactor=1.1, minNeighbors=3)

    print({len(faces_rect)})

    for (x,y,w,h) in faces_rect:
        cv.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), thickness=2)
    cv.imshow('Detected Faces', frame)



    if cv.waitKey(1) & 0xFF==ord('d'):
        break
wcapture.release()
cv.destroyAllWindows()

【问题讨论】:

  • 请尝试将一些东西从while循环中取出。愿你只需要for循环,其他的都可以在外面。没有可重复的例子很难说。
  • 您正在循环的每次迭代中创建一个新的 cv.VideoCapture 实例。不确定占了多少执行时间,但如果将其移出应该会看到改进。
  • 这正是问题所在,谢谢 frippe!
  • windows 上的 8% 可以是 12 核系统的一个完整 CPU 核。请澄清。

标签: python opencv


【解决方案1】:

我没有在我当前使用的机器上安装 opencv,但是将 cv.VideoCapture 的创建移出循环并且每次不破坏所有窗口应该会加快执行速度:

import cv2 as cv
wcapture = cv.VideoCapture(0)
while True:
    ret, frame = wcapture.read()
    if ret:
        imgGray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
        face_haar = cv.CascadeClassifier('haar_face.xml')

        faces_rect = face_haar.detectMultiScale(imgGray, scaleFactor=1.1, minNeighbors=3)

        print({len(faces_rect)})

        for (x,y,w,h) in faces_rect:
            cv.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), thickness=2)
        cv.imshow('Detected Faces', frame)

    if cv.waitKey(1) & 0xFF==ord('d'):
        break
wcapture.release()
cv.destroyAllWindows()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    相关资源
    最近更新 更多