我正在使用andriod應用程序(IP攝像頭)作爲ip攝像頭。 我在單獨的線程下運行代碼。因爲如果我在主線程中運行它會使程序崩潰。Opencv IP攝像頭錯誤
VideoCapture cap; Mat img;
cap.open("http://192.168.0.101:8080/video?x.mjpeg");
while(waitKey(33)!=27)
{
try{
cap>>img;
cout<<"Thread active"<<endl;
if(img.empty())
{
cout<<"camera Closed"<<endl;
break;
}
imshow("Video",img);
} catch(...{}
}
一切工作正常。即使我關閉相機(關閉andriod應用程序),它會在控制檯中打印「相機關閉」。 當我在我的andriod設備上關閉wifi時發生問題。 現在我直接關掉wifi(應用程序仍在運行)線程凍結,即使它在try catch塊!
我在我的表單中有一個button_click事件,我打電話給它打電話cap.release();
。 如果我點擊這個按鈕,然後,將顯示在Visual Studio(沒有來自OpenCV的錯誤)
HEAP [將Test.exe]跟隨錯誤:堆:在 67977d4修改自由堆塊6797780在被釋放後Windows有在 Test.exe中觸發了一個斷點。
這可能是由於堆損壞引起的,這表示 Test.exe或它已加載的任何DLL的錯誤。
這也可能是由於用戶在Test.exe具有焦點時按下F12。
輸出窗口可能有更多診斷信息。
有沒有人遇到過這個錯誤?
Visual Studio調試器停止在cap.release();
行
有沒有辦法解決這個問題?
感謝&問候
P.S:我使用Visual Studio 2013的OpenCV 3.0 [C++/CLI(的WinForms)]
更新: i的button_clickEvent加入thread->Abort();
(替換cap.release();
)。程序也崩潰了thread-> Abort(); 是否有更安全的方式來終止線程?
我認爲這是OpenCV中的一個錯誤,有沒有解決方法?
感謝您的寶貴答案theg4sh, 它仍然會崩潰,即使我刪除「cap.release() ;」請參閱上述問題中的**更新:**部分。謝謝 –