繁体   English   中英

Opencv IP摄像机错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM