尝试模块化OpenCV检测算法

时间:2018-11-06 08:43:42

标签: python python-3.x opencv module

我做了一个涉及使用OpenCV来检测人脸的项目。该项目在这一年中还没有取得巨大的发展,因此,我未能对我的代码进行模块化以使其更简洁,易于阅读的事实令人担忧。

我使用摄像机供稿来检测人脸和ha发,因此OpenCV必须循环进行逐帧分析,如下所示:

project_dir = dirname(dirname(__file__))
face_cascade_path = join(project_dir, "haarcascades/haarcascade_frontalface_default.xml")

face_cascade = cv2.CascadeClassifier(face_cascade_path)

while camera.view.isOpened():
    ret_val, frame = camera.view.read()
    frame = cv2.resize(frame, (camera.width, camera.height))


    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.05, 6)
    for (x,y,w,h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255,0,0), 2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = frame[y:y+h, x:x+w]

    cv2.imshow(camera.name, frame)
    cv2.startWindowThread()
    cv2.namedWindow(camera.name, cv2.WINDOW_NORMAL)

    # q to quit
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

从这里可以明显看出,我已经在尝试通过在OpenCV(camera.view)中为camera对象使用类以及为该类分配一些其他参数(例如{{ 1}}和camera.width)。但是,视频的OpenCV必须在每个帧的camera.height循环中运行算法,这一事实使我感到非常受限制。 例如,如果代码还包含眼睛检测功能,则它看起来应该像这样:

while

在我看来,如果我进一步对框架的其他对象或任何其他变换应用分析,则代码将变得更加笨拙且难以使用。有什么方法可以对此进行模块化,分离代码并使其更易于维护?

0 个答案:

没有答案