2012-02-29 80 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")