我正在使用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() ;”请参阅上述问题中的**更新:**部分。谢谢 –