最近我得到了一個項目,我必須從給定的圖像中提取臉部(臉部+頭髮)。在opencv-java中優化GrabCut的性能
我正在通過以下方式解決此問題。
- 我從提供的圖像中提取人臉位置。 [我得到一個矩形]
- 我提取該矩形並將其置於相同尺寸的另一圖像作爲輸入圖像。[face_image]
- 我上步驟的face_image施加grabCut算法2.
當face_image包含平滑背景則算法grabCut它工作良好,但是當face_image的背景是複雜的,則算法grabCut提取處理後的圖像中的背景的某些部分過多。
這是我得到的結果的快照。
這裏是我的grabCut代碼:
public void extractFace(Mat image, String fileNameWithCompletePath,
int xOne, int xTwo, int yOne, int yTwo) throws CvException {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Rect rectangle = new Rect(xOne, yOne, xTwo, yTwo);
Mat result = new Mat();
Mat bgdModel = new Mat();
Mat fgdModel = new Mat();
Mat source = new Mat(1, 1, CvType.CV_8U, new Scalar(3));
Imgproc.grabCut(image, result, rectangle, bgdModel, fgdModel, 8, Imgproc.GC_INIT_WITH_RECT);
Core.compare(result, source, result, Core.CMP_EQ);
Mat foreground = new Mat(image.size(), CvType.CV_8UC3, new Scalar(255, 255, 255));
image.copyTo(foreground, result);
Imgcodecs.imwrite(fileNameWithCompletePath, foreground);
}
我怎樣才能提高grabCut算法的性能,所以它會檢測從給定的圖像只有臉和頭髮?
我已經嘗試了很多這些東西,這些東西並不按照我的期望工作..... –
如果你可以更詳細地描述你嘗試過的東西以及它如何不起作用並將它添加到你的問題,也許我可以多一點幫助。 –
我有不同類型的圖像,對於一些圖像的背景是非常相似的頭髮,它是不可能的程序來區分它們,也提到的東西不適用於所有的情況.... –