2012-02-29 49 views
0

我一个人脸检测和识别软件的工作......我成功地检测到面部,并使用EigenObjectRecognizer认识他们......但有时它给错误的结果......所以我会集中的面的使用HaarCascade对象的投资回报率为椭圆,这样我应该能够以消除背景的效果...将图像ROI设置为EMGU CV中其他矩形的形状...?

椭圆=新椭圆(新的PointF(face.rect.X +(face.rect.Width/2),face.rect .Y +(face.rect.Height/2)),新的SizeF(face.rect.Width - 5,face.rect.Height - 25),0); ImageFrame.Draw(椭圆形,新BGR(Color.Green),2);

现在,它可以绘制一个椭圆面对周围的......但如何面对的ROI集此椭圆...

请帮我这...

回答

1

很抱歉,但你可以”实际上将图像的ROI设置为椭圆形,这样做非常复杂并且很慢。

那么它做解析,但是每次你通过几个访问将是部队走的图像数据的for循环来找到正确的位置和条件,以确保它不会偏离不慢。对性能的不利影响意味着它没有得到实施。您可以随时编辑源文件并根据需要进行设置。

或者,您将拥有的最佳方法是创建ROI的空白图像,并通过逐字节地使用一对for循环复制椭圆内包含的面部数据。您也可以使用条件副本来仅复制肤色的纹理。

如果你需要对这个一点帮助,让我知道。但最终你会以黑色背景的脸部图像结束。现在,由于所有面孔都会有黑色背景,因此可以消除其影响。

希望这有助于

干杯,

克里斯

1

你可以使用口罩和位与
做假设IMG是图片
创建面膜:

Image<Gray, byte> mask = new Image<Gray, byte>(img.Width, img.Height); 

调用的形状,你W¯¯蚂蚁,例如椭圆

CvInvoke.Ellipse(mask,new Point(5,5),new Size(10,20),0,0,360, new MCvScalar(255,255,255),-1,Emgu.CV.CvEnum.LineType.AntiAlias, 0); // -1 fill ellipse 

目的地:

Image<Gray, byte> dest = new Image<Gray, byte>(img.Width, img.Height); 

按位与

dest = img.And(img, mask); 
dest.Save("C:/myshape.jpg")