Opencv与Python的问题

0 投票
1 回答
2357 浏览
提问于 2025-04-16 21:18

我刚开始学习Python和OpenCV,想用下面的代码把我的摄像头拍到的图片保存到电脑上:

import cv
if __name__=='__main__':
    pCapturedImage = cv.CaptureFromCAM(1)
    rospy.sleep(0.5)
        pSaveImg=cv.QueryFrame(pCapturedImage)
    cv.SaveImage("test.jpg", pSaveImg)

但是当我尝试打开这个图片时,发现它是空的。有人能帮我解决这个问题吗?另外,我还试过一个程序来显示我的摄像头正在看到的内容:

import cv
if __name__=='__main__':
    cv.NamedWindow("camera",1)
    capture=cv.CaptureFromCAM(0)
    while True:
        img=cv.QueryFrame(capture)
        cv.ShowImage("camera", img)
        if cv.WaitKey(10)==27:
        break
    cv.DestroyedWindow("camera")

可是当我运行这个程序时,只看到一个灰色的屏幕。也希望有人能帮我解决这个问题。谢谢!

1 个回答

1

你试过那些演示程序吗?它们展示了如何使用网络摄像头,还有很多其他功能。

对于第一个问题,我对在opencv中使用摄像头不太熟悉,不过我通过打开捕获设备(代码中的capture.open(device_id))让它工作了。

这里有一个可以运行的Python示例(我使用的是更新的C++接口:imread, imwrite, VideoCapture,等等……你可以在OpenCV文档中找到,Python可用时会标记为“cv2”):

import cv2

capture = cv2.VideoCapture()  # this is the newer c++ interface
capture.open(0)  # Use your device id; I think this is what you are missing. 
image = capture.read()[1]
cv2.imwrite("test.jpg", image)

我也让你的第二个示例工作了,只需在捕获对象上使用open:

import cv2

cv2.namedWindow("camera", 1)  # this is where you will put the video images
capture = cv2.VideoCapture()
capture.open(0)  # again, use your own device id
while True:
    img = capture.read()[1]
    cv2.imshow("camera", img)
    if cv2.waitKey(10) == 27:  # waiting for the esc key
        break
cv2.destroyWindow("camera")

撰写回答