如果您熟悉OpenCV库,您就知道Haar Cascade图像对象检测是什么.通过图像对象检测我的意思是,像人脸检测或其他东西.我有一些Haar Cascade XML用于人脸检测,但我不知道如何创建自己的.我想创建Haar Cascade XML来检测简单的亮圆光源(即从电视遥控器闪烁的红外光).
那么,如何在OpenCV中创建一个Haar Cascade(.xml文件)呢?
我目前正在开展一个项目,我们有一组用相机拍摄的卡车照片.我需要检测它是什么类型的卡车(它有多少个轮子).所以我正在使用EMGU试图检测到这一点.
我遇到的问题是我似乎无法使用EMGU的HoughCircle检测来检测车轮,它没有检测到所有车轮,也会检测到树叶中的随机圆圈.
所以我不知道接下来我应该尝试什么,我尝试实施SURF算法以匹配它们之间的轮子但这似乎不起作用,因为它们不完全相同,有没有办法我可以实现"松散" SURF算法?
这就是我的开始.
这是Hough Circle检测后得到的结果.许多错误的检测,有些甚至没有接近圆形,并且由于某种原因后轮被检测为单个.
是否可以使用SURF确认检测到的圆圈实际上是轮子并在它们之间进行匹配?我对下一步应该做的事情有点迷茫,任何帮助都会非常感激.
(抱歉英文不好)
UPDATE
这就是我做的.我使用blob跟踪能够在我的照片集中找到斑点.有了这个我有效地可以找到移动卡车.然后我将blob的矩形分成两部分并从那里取下半部分我知道我得到了应该包含轮子的区域,这大大增加了检测.然后我会对我得到的车轮进行轻度强度松动检查.由于它们通常更黑,我应该得到一个相当低的价值,并可以丢弃太白,180/255及以上的任何东西.我也知道我的圆半径不能大于检测区的一半除以一半.
我已经与EMGU + OpenCV合作了很长一段时间并遇到了这个AccessViolationException
谜.
首先,代码:
class AVE_Simulation
{
public static int Width = 7500;
public static int Height = 7500;
public static Emgu.CV.Image<Rgb, float>[] Images;
static void Main(string[] args)
{
int N = 50;
int Threads = 5;
Images = new Emgu.CV.Image<Rgb, float>[N];
Console.WriteLine("Start");
ParallelOptions po = new ParallelOptions();
po.MaxDegreeOfParallelism = Threads;
System.Threading.Tasks.Parallel.For(0, N, po, new Action<int>((i) =>
{
Images[i] = GetRandomImage();
Console.WriteLine("Prossing image: " + i);
Images[i].SmoothBilatral(15, 50, 50);
GC.Collect();
}));
Console.WriteLine("End");
}
public static Emgu.CV.Image<Rgb, float> GetRandomImage() …
Run Code Online (Sandbox Code Playgroud) 由Emgu(OpenCV的.net包装器)提供的图像大小调整功能可以使用以下四种插值方法中的任何一种:
我粗略地理解线性插值,但只能猜测立方或区域的作用.我怀疑NN代表最近的邻居,但我可能是错的.
我正在调整图像大小的原因是减少像素数量(它们将在某个时刻迭代)同时保持它们的代表性.我之所以提到这一点,是因为在我看来插值是这个目的的核心 - 因此获得正确的类型应该非常重要.
那么我的问题是,每种插值方法的优缺点是什么?它们如何不同,我应该使用哪一个?
我需要Haar Cascades xml文件,用于口腔,眼睛和鼻子.提供有用的链接.
任何形式的帮助将受到高度赞赏.
我正在寻找可以检测网络摄像头流中的面部并检测性别的SDK或库.Windows下的免费或付费,C++或C#.有什么建议?
opencv image-processing computer-vision face-detection emgucv
我正在尝试调试我的程序,在c#中使用emgu和HaarCascade.我得到一个像这样的例外:
无法加载DLL'cvextern':找不到指定的模块.(来自HRESULT的异常:0x8007007E)
我已将文件cvextern.dll添加到我的项目中,并尝试在文件属性上"复制始终"和"复制如果更新"选项.此外,构建在平台x64中.
这部分是我写的:
private void Load_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "Photo Files (*.jpg)|*.JPG";
dlg.CheckFileExists = true;
if (dlg.ShowDialog() == DialogResult.OK)
{
Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(dlg.FileName);
HaarCascade face = new HaarCascade("haarcascade_frontalface_alt.xml");
Run Code Online (Sandbox Code Playgroud)
而例外是在最后一行.
OpenCV.NET,OpenCVSharp和EmguCV有什么区别?
它们源自OpenCV.
那么,他们的设计,实施和应用理念有何不同?
我从网络摄像头捕获图像,对它们进行一些繁重的处理,然后显示结果.为了保持帧率高,我想让不同帧的处理并行运行.
所以,我有一个'制片人',它捕捉图像并将它们添加到'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) 我被要求建立一个实时的人脸识别应用程序,经过一些环顾四周,我决定尝试使用EmguCV和OpenCV作为面部识别库.
我目前遇到的问题是尝试安装和运行SDK.我按照这里的说明尝试让它运行,但我仍然无法运行样本.每当我尝试运行它们时,我都会收到错误
The program can't start because nvcuda.dll is missing from your computer.
Try reinstalling the program to fix this problem.
Run Code Online (Sandbox Code Playgroud)
我已经尝试了大多数常用的修复,例如将bin文件夹添加到我的环境路径并将dll复制到我的system32文件夹中,但它们似乎都没有.
我假设这是一个问题,因为我没有nVidia显卡,但我不知道我能做些什么.现在,我将尝试重新编译源代码,而不是使用下载的.exe,看看是否有帮助.
有什么建议?