使用Python 2.7中的OpenCV 2.4.7.0在网络摄像头视频上叠加图像

3

我正在尝试在Python中将一张图片叠加在摄像头视频上。我可以将一张图片叠加在另一张图片上,但是当我将同样的方法应用于我的摄像头视频时,它不起作用。以下是我的代码:

#!/usr/bin/python

import cv2
import time

cv2.cv.NamedWindow("Hawk Eye", 1)

capture = cv2.cv.CaptureFromCAM(0)
cv2.cv.SetCaptureProperty(capture, cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 800)
cv2.cv.SetCaptureProperty(capture, cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 600)

x_offset=y_offset=50
arrows = cv2.imread("arrows.png")

while True:
    webcam=cv2.cv.QueryFrame(capture)
    #webcam[y_offset:y_offset+arrows.shape[0], x_offset:x_offset+arrows.shape[1]]=arrows
    cv2.cv.ShowImage("Hawk Eye", webcam)
    if cv2.cv.WaitKey(10) == 27:
        break
cv2.cv.DestroyAllWindows()

如果我取消注释:
img[y_offset:y_offset+arrows.shape[0], x_offset:x_offset+arrows.shape[1]]=arrows

这行代码是将图像导入到程序中,它仅显示摄像头的视频,但当我在循环中添加它时,程序停止工作。谢谢!


当“它停止工作”时,你能否解释发生了什么? - KobeJohn
抱歉没有及时回复!我已经解决了。问题是“webcam”是不同的文件格式(iplimage),不能让我与“arrows”(ndarray文件类型)进行“混合”。 - user3121062
1个回答

0

使用 cv2 API 这个可以正常工作:

import cv2
import time

cv2.namedWindow("Hawk Eye", 1)

capture = cv2.VideoCapture(0)
capture.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 800)
capture.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 600)

x_offset=y_offset=50
arrows = cv2.imread("hawk.png")

while True:
    ret, webcam = capture.read()
    if ret:
        webcam[y_offset:y_offset+arrows.shape[0], x_offset:x_offset+arrows.shape[1]]=arrows
        cv2.imshow("Hawk Eye", webcam)
        if cv2.waitKey(10) == 27:
            break
cv2.destroyAllWindows()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接