【问题标题】:opencv how to use cascade on screen recorderopencv如何在屏幕录像机上使用级联
【发布时间】:2019-01-15 08:09:16
【问题描述】:

所以我是 opencv 的新手,在练习了一些面部检测器并了解了如何使用该库之后,我创建了自己的级联,它应该可以识别我计算机上的图标,例如徽标和其他图标。 首先要确保我的级联工作我写了一个检测我拍摄的图像中的图标,我截取了一个屏幕截图并通过级联处理它作为图像并且工作正常。代码是

import numpy as np
import cv2
img = cv2.imread('body.jpg')

face_csc = cv2.CascadeClassifier('new_cascade.xml')

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

faces = face_csc.detectMultiScale(gray, 1.1 , 4)

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

cv2.imshow('img',img)
cv2.waitKey(0)

一段时间后,我为它写了这个来渲染我的屏幕,同时检测图标的方式与我在屏幕截图上尝试的方式相同:

import numpy as np
import cv2
from PIL import ImageGrab

fourcc = cv2.VideoWriter_fourcc(*'XVID')

face_csc = cv2.CascadeClassifier('new_cascade.xml')

out = cv2.VideoWriter("test_output.avi", fourcc, 5.0, (1366, 768))

while True:

    img = ImageGrab.grab(bbox=(100, 10, 750, 750))
    # convert image to numpy array
    img_np = np.array(img)
    # convert color space from BGR to RGB
    frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)
    # show image on OpenCV frame
    faces = face_csc.detectMultiScale(frame, 1.1 , 4)
    cv2.imshow("stream", frame)
    # write frame to video writer
    out.write(frame)
    for (x,y,w,h) in faces:
        cv2.rectangle(frame,(x,y),(x+w,y+h), (255,0,0), 2)
        roi_gray = frame[y:y+h, x:x+w]
        roi_color = img_np[y:y+h,x:x+w]
        if cv2.waitKey(1) == 27:
            break
cv2.waitKey(0)
out.release()

但是在运行代码时它没有显示任何错误,但它也没有检测或识别它只是记录我的屏幕的任何图标,我已经尝试调试了几个小时无济于事,有什么想法吗?

【问题讨论】:

    标签: python opencv machine-learning computer-vision bots


    【解决方案1】:

    您应该在绘制矩形之后显示和编写视频,而不是之前。

    import numpy as np
    import cv2
    from PIL import ImageGrab
    
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    
    face_csc = cv2.CascadeClassifier('new_cascade.xml')
    
    out = cv2.VideoWriter("test_output.avi", fourcc, 5.0, (1366, 768))
    
    while True:
    
        img = ImageGrab.grab(bbox=(100, 10, 750, 750))
        # convert image to numpy array
        img_np = np.array(img)
        # convert color space from BGR to RGB
        frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)
        # show image on OpenCV frame
        faces = face_csc.detectMultiScale(frame, 1.1 , 4)
    
        for (x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h), (255,0,0), 2)
            roi_gray = frame[y:y+h, x:x+w]
            roi_color = img_np[y:y+h,x:x+w]
            if cv2.waitKey(1) == 27:
                break
    
        cv2.imshow("stream", frame)
        # write frame to video writer
        out.write(frame)
    
    cv2.waitKey(0)
    out.release()
    

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多