2013-08-30 22 views
2

我正在嘗試面部交換使用面部檢測的應用程序。直到現在,我得到在位圖中檢測到的臉部,並在檢測到的臉部上繪製橢圓。但現在我需要使用橢圓內的面,以便我可以交換兩個面。可能嗎。我需要一些關於這方面的建議。面部交換使用面部檢測Android

我的活動類,如下所示

public class FaceDetectionActivity extends Activity 
{ 


public MyView faceview; 
public ImageView gallery; 
private Uri imageURI; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.main); 
    setContentView(R.layout.main); 

    faceview = (MyView)findViewById(R.id.faceview); 

    gallery=(ImageView)findViewById(R.id.gallery); 

    gallery.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
      intent.setType("image/*"); 
      startActivityForResult(intent, 0); 

     } 
    }); 


} 


@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == Activity.RESULT_OK) { 

     if(requestCode==0){ 

     imageURI = data.getData(); 


     try { 
      Bitmap b = android.provider.MediaStore.Images.Media.getBitmap(getContentResolver(), imageURI); 

      faceview.myBitmap=b; 


     } catch (FileNotFoundException e) { 
//    TODO Auto-generated catch block 
       e.printStackTrace(); 
     } catch (IOException e) { 
//    TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



     faceview.invalidate(); 

     } 


     faceview.invalidate(); 
    } else { 
     System.exit(0); 
     Log.e("result", "BAD"); 
    } 
} 


} 

和我的視圖類

public class MyView extends ImageViewTouchBase { 

public RectF rectF; 
public Bitmap myBitmap; 
private int width, height; 
private FaceDetector.Face[] detectedFaces; 
private int NUMBER_OF_FACES=10; 
private FaceDetector faceDetector; 
private int NUMBER_OF_FACE_DETECTED; 
private float eyeDistance; 
Matrix mImageMatrix; 

public MyView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
    BitmapFactory.Options bitmapFatoryOptions=new BitmapFactory.Options(); 
    bitmapFatoryOptions.inPreferredConfig=Bitmap.Config.RGB_565; 
    myBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.familyportrait,bitmapFatoryOptions); 
    width=myBitmap.getWidth(); 
    height=myBitmap.getHeight(); 
    detectedFaces=new FaceDetector.Face[NUMBER_OF_FACES]; 
    faceDetector=new FaceDetector(width,height,NUMBER_OF_FACES); 
    NUMBER_OF_FACE_DETECTED=faceDetector.findFaces(myBitmap, detectedFaces); 
} 

@Override 
protected void onDraw(Canvas canvas) 
{ 
    if(myBitmap!=null) 
    { 


    canvas.drawBitmap(myBitmap, 0,0, null); 

    } 
    Paint myPaint = new Paint(); 
    myPaint.setColor(Color.GREEN); 
    myPaint.setStyle(Paint.Style.STROKE); 
    myPaint.setStrokeWidth(3); 

    for(int count=0;count<NUMBER_OF_FACE_DETECTED;count++) 
    { 
     Face face=detectedFaces[count]; 
     PointF midPoint=new PointF(); 
     face.getMidPoint(midPoint); 

     eyeDistance=face.eyesDistance(); 

    float left = midPoint.x - (float)(1.4 * eyeDistance); 
    float right = midPoint.x + (float)(1.4 * eyeDistance); 
    float top = midPoint.y - (float)(1.8 * eyeDistance); 
    float bottom = midPoint.y + (float)(1.8 * eyeDistance); 

    Rect imageRect = new Rect(0, 0, width, height); 
    rectF = new RectF(); 

    rectF.set(left,top,right,bottom); 

    canvas.drawOval(rectF, myPaint); 


    } 
} 

} 

現在我想的橢圓形裏面的內容被選中。請給我建議一些想法。

回答

1

我只是想通了。我使用上面的代碼中的變量Left,Right,Top和Bottom創建了另一個位圖。然後我得到了臉部的一個正方形位圖。我從正方形位圖面上提取圓形位圖。而已。

+0

你能分享一下你的代碼嗎? – NoviceMe

+1

它有點麻煩的代碼。我將寫一篇教程並在一週內分享。 –

+0

嘿@Sandeep,我愛你的想法,如果可能的話,很樂意看到代碼。 – KickAss