2016-10-12 6 views
0

私の目的は、その画像が歪んでいるかどうかにかかわらず、画像内で最大の矩形を検出することです。いくつかの研究とグーグルーグの後、私は理論的にはうまくいくはずのコードを考え出しましたが、半分のケースで困惑した結果が見られます。OpenCVが最大の長方形を検出すると、困惑する結果が生じる

私は、AndroidのためのOpenCVを使用し、ここでのコードは次のようになります。いくつかのケースでは

private void find_parallels() { 
    Utils.bitmapToMat(selectedPicture,img); 
    Mat temp = new Mat(); 
    Imgproc.resize(img,temp,new Size(640,480)); 
    img = temp.clone(); 

    Mat imgGray = new Mat(); 
    Imgproc.cvtColor(img,imgGray,Imgproc.COLOR_BGR2GRAY); 

    Imgproc.GaussianBlur(imgGray,imgGray,new Size(5,5),0); 

    Mat threshedImg = new Mat(); 
    Imgproc.adaptiveThreshold(imgGray,threshedImg,255,Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C,Imgproc.THRESH_BINARY,11,2); 

    List<MatOfPoint> contours = new ArrayList<>(); 
    Mat hierarchy = new Mat(); 
    Mat imageContours = imgGray.clone(); 
    Imgproc.cvtColor(imageContours,imageContours,Imgproc.COLOR_GRAY2BGR); 

    Imgproc.findContours(threshedImg,contours,hierarchy,Imgproc.RETR_TREE,Imgproc.CHAIN_APPROX_SIMPLE); 
    max_area = 0; 
    int num = 0; 

    for (int i = 0; i < contours.size(); i++) { 
     area = Imgproc.contourArea(contours.get(i)); 

     if (area > 100) { 
      MatOfPoint2f mop = new MatOfPoint2f(contours.get(i).toArray()); 
      peri = Imgproc.arcLength(mop, true); 
      Imgproc.approxPolyDP(mop, approx, 0.02 * peri, true); 

      if(area > max_area && approx.toArray().length == 4) { 
       biggest = approx; 
       num = i; 
       max_area = area; 
      } 

     } 

    } 

    selectedPicture = Bitmap.createBitmap(640,480, Bitmap.Config.ARGB_8888) ; 
    Imgproc.drawContours(img,contours,num,new Scalar(0,0,255)); 
    Utils.matToBitmap(img, selectedPicture); 

    imageView1.setImageBitmap(selectedPicture);} 

この画像に見られるように、それは優れた作品(申し訳ありません..モニタベゼルと画面の間に白い線を参照してください。作品 例:色)画面が灰色がかっている Example that works

をただしたときに、この画像では、ほとんどの画像が狂った結果を与えます。 動作しない例: Example that doesn't work

答えて

1

てみ使用形態、拡張して、それを改善する必要がある同じカーネルを侵食します。 または、pyrDown + pyrUpを使うか、それをぼかすだけです。

目的のオブジェクトがノイズよりもはるかに大きいため、短時間でローパスフィルタクラスのメソッドを使用します。

関連する問題