Camera 如何使用EmguCV c将IP摄像头快照保存在内容文件夹中#
我用的是emgucv3.4。我需要定期(5分钟)存储IP摄像头的快照。我尝试将快照存储在内容文件夹中(ASP.NET MVC)。我得到了访问冲突异常。帮助我。 我的代码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
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;
}
}