2016-07-27 153 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,如果它真的有效,并帮助你 –