我已经使用查找轮廓和boundingrect并将其显示在我的项目中。那么我想找到最大的轮廓并显示它。这可能吗?我是OpenCV java lang的新手。如何在java中找到最大的轮廓opencv

继承人到目前为止我的代码:

@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();

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;

希望,有人在这一些经验。谢谢..

2016-08-04

Bagus W

+0

是的,它肯定是可以的,你可以更确切地界定什么叫最大的轮廓是什么意思?你是否希望找到具有最大面积的轮廓(白色像素),或者只需要最大面积为“boundingRect()”的轮廓。 –

+0

@ZadR我想展示最大的边界框。希望你能帮助我。锡里,但即时通讯新的。 –

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐