私は輪郭を見つけて境界を修正し、それを私のプロジェクトで表示しました。私は最大の輪郭を見つけてそれを表示したいと思います。これは可能ですか?私はOpenCV Java Langの初心者です。java opencvで最大の輪郭を見つける方法
HERESにこれまでの私のコード:
@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();
mEroded = new Mat();
}
@Override
public void onCameraViewStopped() {
mRgba.release();
mHsv.release();
mHsvMask.release();
mDilated.release();
hierarchy.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba =inputFrame.rgba();
contours = new ArrayList<MatOfPoint>();
hierarchy =new Mat();
mHsv = new Mat();
mHsvMask =new Mat();
Imgproc.cvtColor(mRgba, mHsv, Imgproc.COLOR_RGB2HSV);
Scalar lowerThreshold = new Scalar (0, 0, 0); // Blue color – lower hsv values
Scalar upperThreshold = new Scalar (179, 255, 10); // Blue color – higher hsv values
Core.inRange (mHsv, lowerThreshold , upperThreshold, mHsvMask);
//just some filter
//Imgproc.dilate (mHsvMask, mDilated, new Mat());
//Imgproc.erode(mDilated,mEroded,new Mat());
Imgproc.findContours(mHsvMask, contours, hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);
for (int contourIdx=0; contourIdx < contours.size(); contourIdx++)
{
//Minimun size allowed for consideration
MatOfPoint2f approxCurve = new MatOfPoint2f();
MatOfPoint2f contour2f = new MatOfPoint2f(contours.get(contourIdx).toArray());
//Processing on mMOP2f1 which is in type MatOfPoint2f
double approxDistance = Imgproc.arcLength(contour2f,true)*0.02;
Imgproc.approxPolyDP(contour2f,approxCurve,approxDistance,true);
//convert to MatofPoint
MatOfPoint point = new MatOfPoint(approxCurve.toArray());
//get boundingrect from contour
Rect rect = Imgproc.boundingRect(point);
Imgproc.rectangle(mRgba,new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(255, 0, 0, 255),3);
//bisa Imgproc.rectangle(mRgba, rect.tl(), rect.br(), new Scalar(255, 0, 0),1, 8,0);
//show contour kontur
if(Imgproc.contourArea(contours.get(contourIdx))>100) {
Imgproc.drawContours(mRgba, contours, contourIdx, new Scalar(0,255,0), 5);
}
}
return mRgba;
がうまくいけば、誰かがこの中にいくつかの経験を持っています。お返事ありがとう...
はい、それはあなたが最大の輪郭によって何を意味するかより正確に定義することができ、確実に可能ですか?最大の面積を持つ輪郭(白いピクセル)を探したいのか、それとも 'boundingRect()'の最大面積を持つ輪郭だけを必要としますか? – ZdaR
@ ZadR最大の境界線を表示したい。うまくいけば私は私を助けることができる。ソリ、しかし、私はこれで新しいです。 –