2016-07-27 152 views
1

我能夠使用C++檢測圖像中的輪廓。不過,我想用java lang在Android中進行轉換。所以,我使用android studio製作。 (部分原因是因爲我是一個JAVA新手)OpenCV:輪廓檢測Android contourDIx問題

然後,我發現了一些問題,當我運行它,我有一個錯誤的問題與此代碼:

如果(輪廓[contourIdx] .size() > 100)

在這個主程序中。

@Override 
    public void onCameraViewStarted(int width, int height) { 
     mRgba = new Mat(height, width, CvType.CV_8UC4); 
     mHsv = new Mat(height,width,CvType.CV_8UC3); 
     hierarchy = new Mat(); 
     mHsvMask = new Mat(); 
     mDilated = new Mat(height, width, CvType.CV_8UC4); 
    } 
@Override 
public void onCameraViewStopped() { 
    mRgba.release(); 
    mHsv.release(); 
    mHsvMask.release(); 
    mDilated.release(); 
    hierarchy.release(); 

} 

@Override 
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { 
    mRgba =inputFrame.rgba(); 
    mHsv = new Mat(); 

    Imgproc.cvtColor(mRgba, mHsv, Imgproc.COLOR_RGB2HSV, 3); 
    hierarchy.release(); 
    Scalar lowerThreshold = new Scalar (120, 100, 100); 
    Scalar upperThreshold = new Scalar (179, 255, 255); 
    Core.inRange (mHsv, lowerThreshold , upperThreshold, mHsvMask); 

    Imgproc.dilate (mHsvMask, mDilated, new Mat()); 
    Imgproc.findContours(mDilated, contours, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); 

    for (int contourIdx=0; contourIdx < contours.size(); contourIdx++) 
    { 
     if(contours[contourIdx].size()>100) // Minimum size allowed for consideration 
     { 
      Imgproc.drawContours (mRgba, contours, contourIdx, new Scalar(0,255,0) , -5); 
     } 
    } 
    return mRgba; 
} 
} 

希望有人有這方面的經驗。謝謝..

+0

您可以瞭解開放的簡歷從一些書,你可以從http://www.filtrlink.com獲取和搜索框 –

回答

0

使用面積的概念

if(Imgproc.contourArea(contours.get(contourIdx))>100) { 
      Imgproc.drawContours(mRgba, contours, contourIdx, new Scalar(Math.random() * 255, Math.random() * 255, Math.random() * 255), 1, 8, hierarchy, 0, new Point()); 
     } 
+0

感謝在搜索的OpenCV夥計,生病嘗試它:D –

+0

其工作感謝..:D –

+0

勾選答案Bagus W,如果它真的有效,並幫助你 –