[英]opencv_ffmpeg**.dll error in OpenCV 2.4.11 for IP Camera Access?
[英]Opencv IP Camera Error
我正在使用andriod应用(IP网络摄像头)作为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]:HEAP:空闲堆块6797780在释放后在67977d4进行了修改Windows触发了Test.exe中的断点。
这可能是由于堆损坏所致,这表明Test.exe或其已加载的任何DLL中存在错误。
这也可能是由于用户在Test.exe具有焦点时按了F12。
输出窗口可能包含更多诊断信息。
有人遇到过这个错误吗?
Visual Studio调试器在cap.release();
处停止cap.release();
线
有没有办法解决这个问题?
感谢和问候
PS:我正在将Visual Studio 2013与opencv 3.0 [C ++ / Cli(winforms)]一起使用
更新:我添加了thread->Abort();
在button_clickEvent中(替换cap.release();
)。 程序也会因为thread-> Abort()而崩溃; 有没有更安全的方法来终止线程?
我认为这是OpenCV中的错误,是否有解决方法?
您不应该调用cap.release() ,这将在cap的可见性区域结束时第二次调用。 在阅读之前检查cap.isOpened()也将是很棒的。
“线程-> Abort();” 我想没关系,另一种停止方法是设置静态全局标志以完成循环,例如:
static char doCapThread = 1;
...
while((waitKey(33)!=27) && doCapThread) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.