2016-05-16 87 views
0
private Mat get_template(CascadeClassifier clasificator, Rect area, int size) { 
    Mat template = new Mat(); 
    Mat mROI = mGray.submat(area); 
    Mat kaka = new Mat(); 
    MatOfRect eyes = new MatOfRect(); 
    Point iris = new Point(); 
    Rect eye_template = new Rect(); 
    clasificator.detectMultiScale(mROI, eyes, 1.15, 2, 
      Objdetect.CASCADE_FIND_BIGGEST_OBJECT 
        | Objdetect.CASCADE_SCALE_IMAGE, new Size(30, 30), 
      new Size()); 

    Rect[] eyesArray = eyes.toArray(); 
    for (int i = 0; i < eyesArray.length;) { 
     Rect e = eyesArray[i]; 
     e.x = area.x + e.x; 
     e.y = area.y + e.y; 
     Rect eye_only_rectangle = new Rect((int) e.tl().x, 
       (int) (e.tl().y + e.height * 0.4), (int) e.width, 
       (int) (e.height * 0.6)); 
     mROI = mGray.submat(eye_only_rectangle); 
     Mat vyrez = mRgba.submat(eye_only_rectangle); 


     Core.MinMaxLocResult mmG = Core.minMaxLoc(mROI); 

     Imgproc.circle(vyrez, mmG.minLoc, 2, new Scalar(255, 255, 255, 255), 2); 
     iris.x = mmG.minLoc.x + eye_only_rectangle.x; 
     iris.y = mmG.minLoc.y + eye_only_rectangle.y; 
     eye_template = new Rect((int) iris.x - size/2, (int) iris.y 
       - size/2, size, size); 
     Imgproc.rectangle(mRgba, eye_template.tl(), eye_template.br(), 
       new Scalar(255, 0, 0, 255), 1); 

     resultBitmap = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(); 

     Utils.matToBitmap(mRgba, resultBitmap); 
    // imageView.setImageBitmap(resultBitmap); 
     template = (mGray.submat(eye_template)).clone(); 
     return template; 
    } 
    return template; 
} 

放置在特定點的圖像中的墊目標使用上面的代碼我得到一個矩形圍繞眼睛的視網膜,我想要做的就是改變這種矩形圖像像人工晶狀體覆蓋什麼眼睛的視網膜。開放CV的Android

Imgproc.rectangle(mRgba, eye_template.tl(), eye_template.br(), 
       new Scalar(255, 0, 0, 255), 1); 

隨着上面的線我得到的矩形。我怎樣才能將這個矩形轉換爲圖像。
具體而言我怎樣才能在點在MAT對象放置一個圖像從eye_template.tl到來()eye_template.br()

回答

0

你可以試試這個。

首先需要通過訪問他們的x和y值

eye_template.tl()來計算從點的矩形的寬度和高度。Xeye_template.tl()。ÿ

然後調整透鏡墊矩形的寬度和高度

Size dsize= new Size(width,height); 
Mat resizeLens = new Mat() 
Imgproc.resize(srcLens, resizeLens,dsize) 

然後複製rezisedLens墊retaina墊(mRgba子陣列)

resizeLens.copyTo(retina(Rect(x,y,resizeLens.cols, resizeLens.rows)); 
+0

hy Thnx的解決方案,但當我複製resizedLens視網膜墊它不工作沒有任何顯示 –

+0

它應該工作。你得到的高度和寬度是多少? 嘗試使用固定的高度和寬度100x100進行調試,並將其放置在xy的已知位置上。 也發佈您的代碼。 –