2013-12-12 49 views
6

私はアンドロイドでopencvで作業していますが、色相チャンネルで目の瞳孔の色を変更したいのですが、これはすでに達成していますが、問題は領域が矩形ですが、眼の瞳孔としての円形は円形領域である。親切に私がこれを達成する方法を手伝ってください。opencvで目の瞳孔を円で検出する方法

private Mat get_template(CascadeClassifier clasificator, Rect area,int size){ 
    Mat template = new Mat(); 
    Mat mROI = mGray.submat(area); 
    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; i++){ 
     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); 

     Core.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); 
     Core.rectangle(mRgba,eye_template.tl(),eye_template.br(),new Scalar(255, 0, 0, 255), 2); 
     template = (mGray.submat(eye_template)).clone(); 
     return template; 
    } 
    return template; 
    } 
+0

ruが瞳孔を検出する理由は、私はあなたがいる場合umerk44 @眼球 – umerk44

+0

について話していると思いますあなたは目玉のコードを持っています、あなたは親切にそのコードを共有することができます。 –

+0

私はあなたにコードを教えてください。あなたはどこにいますか? :P – umerk44

答えて

3

いくつかの潜在的な解決策:

  • 最も単純な、それは非常に堅牢ではないかもしれませんが、内接円(長方形に縛ら円)を計算し、それは色だ変更することである - あなたの瞳場合検出は非常に正確ですが、この解決法はうまくいくかもしれません。

  • より堅牢なソリューションは、色やグラデーションに基づいて(エッジ検出)の瞳の領域を検出することであろう

+0

ありがとうございます。私はあなたが言ったことを理解していますが、エッジ検出に関するいくつかのコード例を共有できますか?どのように私は目の瞳のエッジを検出できますか? –

+0

関連コードがありません。 open cvにはいくつかのアルゴリズムが実装されています。 –

関連する問題