我从网络摄像头捕获图像,对它们进行一些繁重的处理,然后显示结果.为了保持帧率高,我想让不同帧的处理并行运行.
所以,我有一个'制片人',它捕捉图像并将它们添加到'inQueue'; 它还需要来自'outQueue'的图像并显示它:
public class Producer
{
Capture capture;
Queue<Image<Bgr, Byte>> inQueue;
Queue<Image<Bgr, Byte>> outQueue;
Object lockObject;
Emgu.CV.UI.ImageBox screen;
public int frameCounter = 0;
public Producer(Emgu.CV.UI.ImageBox screen, Capture capture, Queue<Image<Bgr, Byte>> inQueue, Queue<Image<Bgr, Byte>> outQueue, Object lockObject)
{
this.screen = screen;
this.capture = capture;
this.inQueue = inQueue;
this.outQueue = outQueue;
this.lockObject = lockObject;
}
public void produce()
{
while (true)
{
lock (lockObject)
{
inQueue.Enqueue(capture.QueryFrame());
if (inQueue.Count == 1)
{
Monitor.PulseAll(lockObject);
}
if (outQueue.Count > 0)
{
screen.Image = outQueue.Dequeue(); …
Run Code Online (Sandbox Code Playgroud) 我正在使用C#创建一个Windows应用程序,单击GUI上的按钮时,应显示屏幕键盘.
如果获得任何帮助,将不胜感激.谢谢.
此外,由于我主要在我的应用程序的其余部分使用Emgu Cv库,我们可以简单地使用它来调用屏幕键盘吗?
我收到了这个错误
'Emgu.CV.CvInvoke'的类型初始值设定项引发了异常.
当我尝试使用Emgu CV时.我已经尝试了一切我能想到的解决这个问题,但它仍然会给出相同的错误,当我点击一个按钮时它会显示
你调用的对象是空的.
这是我正在尝试的代码:
void ProcessFunction(object sender, EventArgs e)
{
imgOrg = capturecam.QueryFrame();
if (imgOrg == null) return;
imgProc = imgOrg.InRange(new Bgr(50, 50, 50), new Bgr(255, 255, 255));
imgProc = imgProc.SmoothGaussian(9);
imageBox1.Image = imgOrg;
imageBox2.Image = imgProc;
}
Run Code Online (Sandbox Code Playgroud)
我可能做错了什么以及如何进一步调试?谢谢!
我想在C#(使用EmguCV 3.0)中进行运动检测,以移除运动中或前景中的对象以绘制叠加层.
这是我用Kinect完成的一个示例测试(因为它是一个深度相机)
我如何开始使用EmguCV 3.0?
有人可以帮助我开始吗?
编辑:17/06/2015
在EmguCV3.0.0 RC中,我没有在包和文档中看到OpticalFlow:http://www.emgu.com/wiki/files/3.0.0-rc1/document/html/b72c032d-59ae-c36f-5e00-12f8d621dfb8 热媒
只有:DenseOpticalFlow,OpticalFlowDualTVL1 ???
这是一个AbsDiff代码:
var grayFrame = frame.Convert<Gray, Byte>();
var motionFrame = grayFrame.AbsDiff(backFrame)
.ThresholdBinary(new Gray(20), new Gray(255))
.Erode(2)
.Dilate(2);
Run Code Online (Sandbox Code Playgroud)
结果:
我不知道怎么把动作变成白色?
这是Blob代码:
Image<Bgr, Byte> smoothedFrame = new Image<Bgr, byte>(frame.Size);
CvInvoke.GaussianBlur(frame, smoothedFrame, new Size(3, 3), 1); //filter out noises
Mat forgroundMask = new Mat();
fgDetector.Apply(smoothedFrame, forgroundMask);
CvBlobs blobs = new CvBlobs();
blobDetector.Detect(forgroundMask.ToImage<Gray, byte>(), blobs);
blobs.FilterByArea(400, int.MaxValue);
blobTracker.Update(blobs, 1.0, 0, 1);
foreach (var pair in blobs) { …
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个能够识别两个6面骰子值的简单应用程序.我正在寻找一些通用指针,甚至可能是一个开源项目.
两个骰子将分别为黑色和白色,分别为白色和黑色.它们与相机的距离将始终相同,但它们在比赛场地上的位置和方向将是随机的.
骰子http://www.freeimagehosting.net/uploads/9160bdd073.jpg
(不是最好的例子,表面将是一个更鲜明的颜色,阴影将消失)
我没有开发这种识别软件的经验,但我认为诀窍是首先通过搜索具有主导白色或黑色的方形轮廓来隔离脸部(图像的其余部分,即桌子/游戏)表面,将以明显不同的颜色),然后隔离点数计数.自顶向下照明将消除阴影.
我希望所描述的场景如此简单(阅读:常见)它甚至可以用作开发OCR技术或类似计算机视觉挑战的开发人员的"介绍性练习".
更新:
我做了一些进一步的谷歌搜索,并发现了这个视频,奇怪的是,这正是我正在寻找的.看来OpenCV项目是我迄今为止最好的选择,我会尝试将其用于其他项目,OpenCVDotNet或Emgu CV.
更新:
仍在苦苦挣扎,无法让Emgu CV工作.
想法,指针,想法等仍然非常受欢迎!
我想使用OpenCV(或Emgu CV)开发一个"人数统计系统".
请指导我如何实现或引导我一些示例或开源项目.
(我做了一些工作:提取差异然后阈值删除背景,使用运动历史等等;仍然没有好结果.)
编辑1:我正在计算一个高人流量(其中十几个可能同时出现).
编辑2:必须至少80%准确.人们走过一扇近5米宽的门.问题是我无法控制相机的位置或角度.相机在距离10米处高度2.5米的地方喊叫.
谢谢
我有一张我扫描过的图像,但白纸在屏幕上不是白色的.有没有办法平衡合同/亮度,使背景更白?
更新
我尝试过EmguCv中建议的Image._EqualizeHist函数:
string file = @"IMG_20120512_055533.jpg";
Image<Bgr, byte> originalColour = new Image<Bgr, byte>(file);
Image<Bgr, byte> improved = originalColour.Clone();
improved._EqualizeHist();
Run Code Online (Sandbox Code Playgroud)
但是得到更糟糕的结果(当第一次灰度缩放时):
我错过了其他参数吗?
我真的是EgmuCV的新手
我尝试使用以下代码从网络摄像头捕获图像:
//Program.cs (Winform)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.UI;
using Emgu.Util;
using Emgu.CV.Structure;
namespace EgmuCVTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Capture cp = new Capture();
ImageViewer imv = new ImageViewer();
Application.Idle += new EventHandler(delegate(object s, EventArgs ea)
{
imv.Image = cp.QueryFrame();
});
imv.ShowDialog();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下错误:
我检查并在.exe文件夹中包含所有必要的DLL
我创建了imageHolder类:
public class ImageHolder : Image<Bgr, Byte>
{
private String imagePath;
public ImageHolder(String path):base(path)
{
this.imagePath = path;
}
public String imgPathProperty
{
get
{ return imagePath; }
set
{ imagePath = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
我创建类的实例并初始化它,如下所示:
private ImageHolder originalImageHolder;
originalImageHolder = new ImageHolder(openFileDialog.FileName);
Run Code Online (Sandbox Code Playgroud)
在运行时我得到这个例外:
'Emgu.CV.CvInvoke'的类型初始值设定项引发了异常.
这是Solution Explorer窗口:
任何想法为什么我得到这个例外,我该如何解决它?
先感谢您.
有没有一种方法可以使用任何“标准”库(例如OpenCV,EmGU,DirectShow等)来阻止自动聚焦?
我希望自动对焦找到最佳对焦,然后在视频捕获期间防止自动对焦自动对焦。
我知道我可以手动设置该值,但这违背了使用自动对焦的目的,而且我还没有找到一种方法来获取由自动对焦确定的最佳对焦值。