Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Camera 如何使用EmguCV c将IP摄像头快照保存在内容文件夹中#_Camera_Ip_Emgucv_Snapshot - Fatal编程技术网

Camera 如何使用EmguCV c将IP摄像头快照保存在内容文件夹中#

Camera 如何使用EmguCV c将IP摄像头快照保存在内容文件夹中#,camera,ip,emgucv,snapshot,Camera,Ip,Emgucv,Snapshot,我用的是emgucv3.4。我需要定期(5分钟)存储IP摄像头的快照。我尝试将快照存储在内容文件夹中(ASP.NET MVC)。我得到了访问冲突异常。帮助我。 我的代码 private VideoCapture\u capture=null; 专用垫架; 公共无效GetSnapshot(CameraDTO CameraDTO) { CvInvoke.UseOpenCL=false; 尝试 { _捕获=新的视频捕获(cameraDTO.CameraAccessURL); _capture.imag

我用的是emgucv3.4。我需要定期(5分钟)存储IP摄像头的快照。我尝试将快照存储在内容文件夹中(ASP.NET MVC)。我得到了访问冲突异常。帮助我。 我的代码

private VideoCapture\u capture=null;
专用垫架;
公共无效GetSnapshot(CameraDTO CameraDTO)
{
CvInvoke.UseOpenCL=false;
尝试
{
_捕获=新的视频捕获(cameraDTO.CameraAccessURL);
_capture.imagegrapped+=ProcessFrame;
if(StartCapture())
{
while(_frame==null)
{
//等摄像机准备好
}
if(_frame!=null&&u capture!=null)
{
图像imgeOrigenal=_frame.ToImage();
imgeOrigenal.Save(@ImageSavepath+@“\ImageFromCamera”+cameraDTO.camID+.jpg”);
}
}
}
捕获(例外情况除外)
{
控制台写入线(除消息外);
}
}
私人布尔StartCapture()
{
如果(_capture!=null)
{
_capture.Start();
返回true;
}
返回false;
}
私有void ProcessFrame(对象发送方、事件参数)
{
尝试
{
如果(_capture!=null&&&u capture.IsOpened&&u capture.Ptr!=IntPtr.Zero&&u frame!=null)
{
_框架=新垫();
_捕获。检索(_帧,0);
}
}
捕获(AccessViolationException exv)
{
WriteLine(“错误:{0}”,exv.Message);
回来
}
捕获(例外情况除外)
{
WriteLine(“错误:{0}”,例如Message);
回来
}
}

@ImageSavepath=Content文件夹,随机生成问题

问题在于您在另一个线程中使用了
\u frame
(跨线程操作)。您应该将图像保存在
FrameProcess()

private void FrameProcess(对象发送方,事件参数e)
{
尝试
{
如果(_capture!=null&&&u capture.IsOpened&&u capture.Ptr!=IntPtr.Zero&&u frame!=null)
{
_框架=新垫();
_捕获。检索(_帧,0);
图像imgeOrigenal=_frame.ToImage();
imgeOrigenal.Save(@ImageSavepath+@“\ImageFromCamera”+cameraDTO.camID+.jpg”);
}
}
捕获(AccessViolationException exv)
{
WriteLine(“错误:{0}”,exv.Message);
回来
}
捕获(例外情况除外)
{
WriteLine(“错误:{0}”,例如Message);
回来
}
}

能否显示一些相关的codeHa Bom表,请检查编辑的内容?在
RetrieveMatFrame()函数中有什么?以及为什么不使用从
\u capture.Retrieve(\u frame,0)获得的垫子
ProcessFrame
中?我正在使用Mat frame保存快照图像imgeOrigenal=_frame.ToImage();imgeOrigenal.Save(@ImageSavepath+@“\ImageFromCamera”+cameraDTO.camID+.jpg”);
private VideoCapture _capture = null;
private Mat _frame;

public void GetSnapshot(CameraDTO cameraDTO)
{
    CvInvoke.UseOpenCL = false;
    try
    {
        _capture = new VideoCapture(cameraDTO.CameraAccessURL);
        _capture.ImageGrabbed += ProcessFrame;

        if (StartCapture())
        {
            while (_frame == null)
            {
                //wait untill camera ready
            }

            if (_frame != null && _capture != null)
            {
                Image<Bgr, Byte> imgeOrigenal = _frame.ToImage<Bgr, Byte>();
                imgeOrigenal.Save(@ImageSavepath + @"\ImageFromCamera" + cameraDTO.camID + ".jpg");
            }
        }
    }
    catch (Exception excpt)
    {
    Console.WriteLine(excpt.Message);
    }
}

private bool StartCapture()
{
    if (_capture != null)
    {
        _capture.Start();
        return true;
    }
    return false;
}

private void ProcessFrame(object sender, EventArgs e)
{
    try
    {
        if (_capture != null && _capture.IsOpened && _capture.Ptr != IntPtr.Zero && _frame != null)
        {
            _frame = new Mat();
            _capture.Retrieve(_frame, 0);
        }
    }
    catch (AccessViolationException exv)
    {
        Console.WriteLine("ERROR: {0}", exv.Message);
        return;
    }
    catch (Exception ex)
    {
        Console.WriteLine("ERROR: {0}", ex.Message);
        return;
    }
}
private void FrameProcess(object sender, EventArgs e)
    {
        try
        {
            if (_capture != null && _capture.IsOpened && _capture.Ptr != IntPtr.Zero && _frame != null)
            {
                _frame = new Mat();
                _capture.Retrieve(_frame, 0);
                Image<Bgr, Byte> imgeOrigenal = _frame.ToImage<Bgr, Byte>();
                imgeOrigenal.Save(@ImageSavepath + @"\ImageFromCamera" + cameraDTO.camID + ".jpg");
            }
        }
        catch (AccessViolationException exv)
        {
            Console.WriteLine("ERROR: {0}", exv.Message);
            return;
        }
        catch (Exception ex)
        {
            Console.WriteLine("ERROR: {0}", ex.Message);
            return;
        }
    }