關於部落格
  • 117911

    累積人氣

  • 1

    今日人氣

    0

    訂閱人氣

OpenCV Note - 相機執行緒錯誤, VideoCapture::Release()

 
由於這次測試我使用另開執行緒的方式測試相機. 執行緒內容大致上為

VideoCapture cap(0);
Mat frame;
while(m_bGrab){
  cap >> frame;
  imshow("aaa",frame);
  if(waitKey(30)>=0) m_bGrab=0; 
}
m_bOK=1;
destroyWindow("aaa");


基本上是參考自(#1): [OpenCV]影像處理API-OpenCV介紹與安裝教學
只是改成 MFC 執行緒模式, 可是當程式關閉時出線的這個問題: 

於 0x011a4fa7 的 CCvDisplay.exe 中發生未處理的例外狀況: 0xC0000005: 讀取位置 0xfeeefef6 時發生存取違規

因為在#1純粹在 c++ 的 main 中於程式結束時 VideoCapture 會自動釋放掉, 但是我猜另創執行緒裡面的宣告 VideoCapture 在 mfc 的 app 結束前並沒有試放(畢竟他是在執行緒裡面宣告的...). 會這麼想是因為後來嘗試在 m_bOK=1 之後加上這一行後就沒有問題了

cap.release();

結論是, mfc 雖然做方便的函式庫卻讓人忘記 c++ 的東西基本上 Create 後都必須記得去 Release, 就像 new 就得 delete 意思一樣.

[See also]
Link, OpenCV, CaptureException
Link, OpenCV, Mat BGR 轉 RGB
Link, OpenCV, 相機執行緒錯誤, VideoCapture::Release()

Power Method, 連結
R 基本指令簡介(An Introduction of R), 連結
R_note, 連結
相簿設定
標籤設定
相簿狀態