0

最初のフレームを取得して変更しないようにしようとしていますが、他の変数(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()
4

1 に答える 1

0

opencv wiki、つまりこのページから 2 つの節を引用させてください: 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()
于 2012-08-18T21:31:35.750 に答える