camera - 如何使用 EmguCV c# 将 IP 摄像机快照保存在 Content 文件夹中
问题描述
我正在使用 EmguCV 3.4。我需要定期(5 分钟)存储来自 IP 摄像机的快照。我尝试将快照存储在Content 文件夹(ASP.NET MVC)中。我得到了访问冲突异常。帮我。我的代码,
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;
}
}
@ImageSavepath = 内容文件夹,随机生成问题
解决方案
问题是您_frame
在另一个线程中使用(跨线程操作)。您应该将图像保存在FrameProcess()
.
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;
}
}
推荐阅读
- gitlab-ci - 允许作业运行“重启”命令而不会导致失败
- blockchain - 将 esplora 配置为指向 bitcoind 服务器的 ip 地址
- swift - Swift - 为什么“do”语句之后的“while”语句会导致编译器错误?
- angular - 模块 '"*/node_modules/ngx-echarts/ngx-echarts"' 没有导出成员 'Ngx Echarts Service'
- typescript - 打字稿界面集
- opengl - DirectDraw Surface - 数据布局
- apache-spark - 有没有办法只打印 Spark SQL 输出?它在执行时打印有关环境的所有其他信息
- opengl - 标准化点云(用于在 OpenGL 中显示)的最有效方法是什么?
- jquery - 如何确定物品是否被丢弃
- laravel - Laravel - 如何在没有额外请求的情况下将缓存值传递给多个视图?