2012-10-31 22 views
1

我想寫一個簡單的openCV代碼,創建一個捕獲並從中檢索第一幀。cvRetrieveFrame crahses

**CvCapture *m_pCapfile = cvCreateFileCapture(m_aviFileName.c_str()); 
if (m_pCapfile) 
    m_frames = cvRound(cvGetCaptureProperty(m_pCapfile, CV_CAP_PROP_FRAME_COUNT)); 
cvSetCaptureProperty(m_pCapfile, CV_CAP_PROP_POS_FRAMES, 0); 
int ret = cvGrabFrame(m_pCapfile); 
IplImage *cap = cvRetrieveFrame(m_pCapfile);** 

在m_frames有153,這是正確的幀數,據我所知。 cvGrabFrame返回1到ret但是cvRetrieveFrame崩潰。

我試圖使用cvCaptureFromFilecvCaptureFromAVI的代替cvCreateFileCapture 在兩種情況下cvRetrieveFrame方法崩潰。

任何想法?

感謝

+0

你使用的是什麼版本的OpenCV?已知Opencv有這樣的問題。 – 2012-10-31 17:14:06

+0

我正在使用2.4.3 –

+0

我已經下載了2.4.0,並且我也遇到了同樣的問題 –

回答

1

**CvCapture *m_pCapfile = cvCreateFileCapture(m_aviFileName.c_str()); 不應該這是CvCapture?

像下面

CvCapture *m_pCapfile = cvCreateFileCapture(m_aviFileName.c_str()); 

我認爲你需要更改代碼,我建議。此外,如果這是您的完整代碼,請確保在您檢索幀的循環中,您沒有調用cvReleaseCapture()。此方法僅在您抓住所有幀或指定數量的幀時纔會調用。

+0

最後有一個版本,我只是沒有複製它。 代碼實際上與您的代碼相同,添加了星號,因爲我試圖格式化文本並使代碼看起來粗體。 你可以看到,在代碼的最後有兩個額外的星號 –

+0

哦,對我來說這是一個新的雙引號! – 2012-11-01 08:08:03

+0

儘管如此,最後幾個可能對您有用的步驟是安裝您的攝像頭驅動程序,查看您的攝像頭是否支持opencv,不要混合使用任何x64,x86構建,即使這樣做不行,請嘗試重建OpenCV的二進制文件。 – 2012-11-01 08:45:01