我正在尝试获取第一帧并保持不变但在每次分配到另一个变量(currImage = cv.QueryFrame(capture))后它会发生变化。我做错了什么?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cv
cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
#SET CAMERA INDEX BELOW
camera_index = -1
capture = cv.CaptureFromCAM(camera_index)
isRunning = True
firstImage = cv.QueryFrame(capture)
def repeat():
global capture #declare as globals since we are assigning to them now
global camera_index
global isRunning
global firstImage
c = cv.WaitKey(100) % 0x100
currImage = cv.QueryFrame(capture)
cv.ShowImage("w1",firstImage)
if(c==27):
isRunning = False
while isRunning:
repeat()
答案 0 :(得分:0)
让我引用opencv wiki的两个段落,即这个页面:http://opencv.willowgarage.com/documentation/python/reading_and_writing_images_and_video.html
cvQueryFrame:
The function cvQueryFrame [...] is just a combination of GrabFrame and RetrieveFrame.
RetrieveFrame:
The function cvRetrieveFrame returns the pointer to the image grabbed.
您在代码中所做的不是复制对象,只是创建指向相应内存的另一个对象。对cvQueryFrame的后续调用只是修改了对象,因此你必须复制它。 试着这样做:
import copy
import cv
cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
#SET CAMERA INDEX BELOW
camera_index = -1
capture = cv.CaptureFromCAM(camera_index)
isRunning = True
firstImage = copy.deepcopy(cv.QueryFrame(capture))
def repeat():
global capture #declare as globals since we are assigning to them now
global camera_index
global isRunning
global firstImage
c = cv.WaitKey(100) % 0x100
currImage = cv.QueryFrame(capture)
cv.ShowImage("w1",firstImage)
if(c==27):
isRunning = False
while isRunning:
repeat()