Notes on cvQueryFrame
用 cvQueryFrame 要特別注意,連續 call 的話會一直往後面的 frame 跑,而且之前用 pointer 指的話,也會跟著往後跑,用 code 來說明的話:
frame1 = cvQueryFrame() ; // point to the first frame
frame2 = cvQueryFrame() ; // point to the second frame
frame2 = cvQueryFrame() ; // point to the second frame
frame1 原本是指向第一個 frame,但又 call 了一次後會跟 frame2 一起指向第二個 frame,若再 call 一次:
frame3 = cvQueryFrame() ; // point to the third frame
則 frame[1-3] 都會指向第三個 frame。
所以碰到像 optical flow 之類需要兩個連續 frame 的時候,第二次 call cvQueryFrame 之前,要先用另外一份空間把第一個 frame 備份起來。我正在玩的這份 sample code 是這樣用的:
allocateOnDemand( &frame1_1C, frame_size, IPL_DEPTH_8U, 1 ); // a self-defined routine for memory allocation, mainly cvCreateImage
cvConvertImage(frame, frame1_1C, 0); // convert to the OpenCV preferred format
cvConvertImage(frame, frame1_1C, 0); // convert to the OpenCV preferred format
Tags: C++, OpenCV, Programming
. 21 Aug 08 | OpenCV | Comments (0)


