Android 零碎轮廓

Android 零碎轮廓,android,opencv,camera,Android,Opencv,Camera,我正在android上使用OpenCV编写一个简单的应用程序,它可以在检测到的黑色物体上绘制红色轮廓 这是处理代码 Mat hsv = new Mat(); Mat maskInrange = new Mat(); Mat dilateMat = new Mat(); List<MatOfPoint> contours= new ArrayList<>(); Imgproc.cvtColor(rgbaImage, hsv, Img

我正在android上使用OpenCV编写一个简单的应用程序,它可以在检测到的黑色物体上绘制红色轮廓

这是处理代码

    Mat hsv = new Mat();
    Mat maskInrange = new Mat();
    Mat dilateMat = new Mat();
    List<MatOfPoint> contours= new ArrayList<>();

    Imgproc.cvtColor(rgbaImage, hsv, Imgproc.COLOR_RGB2HSV);

    Scalar lowerThreshold = new Scalar(0, 0, 0);
    Scalar upperThreshold  = new Scalar(15, 15, 15);

    Core.inRange(hsv, lowerThreshold, upperThreshold, maskInrange);

    Imgproc.dilate(maskInrange, dilateMat, new Mat());

    Mat h=new Mat();

    Imgproc.findContours(dilateMat, contours, h, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);

    Imgproc.drawContours ( rgbaImage, contours, -1, new Scalar(255,0,0), 1);
Mat hsv=新Mat();
Mat maskInrange=新Mat();
Mat=新的Mat();
列表等高线=新的ArrayList();
Imgproc.cvtColor(rgbaImage,hsv,Imgproc.COLOR_RGB2HSV);
标量lowerThreshold=新标量(0,0,0);
标量上限阈值=新标量(15,15,15);
Core.inRange(hsv,低阈值,高阈值,马斯金范围);
Imgproc.deflate(马斯金范围,deflactmat,new Mat());
材料h=新材料();
Imgproc.findContours(放大图、等高线、h、Imgproc.RETR\u列表、Imgproc.CHAIN\u近似值和简单值);
Imgproc.drawContours(rgbaImage,contours,-1,新标量(255,0,0),1);
问题是,不是一个大轮廓代表对象,而是有许多小的不稳定轮廓。


我想这与噪音有关,但改进应用程序的下一步应该是什么?

您可能希望共享您的原始图像,以便我们可以帮助改进您的算法:-)对于您拥有的图像,使用阈值或自适应阈值最有可能解决您的任务。这是来自摄像头的实时处理,而不仅仅是此图像。其他物体看起来很相似解决方案在很大程度上取决于物体和背景的类型,因此我怀疑用这种方法是否能够检测任何背景前的任何物体。物体或背景有什么共同点?恐怕物体没有什么共同点。其想法是创建一个应用程序,该应用程序将在HSV范围内的对象上创建轮廓,并且这些对象不是先验的,因此它们不是特定的对象。所以很难让它普及?我认为,如果物体的颜色是统一的,这不会是一个问题……如果你看一下你提供的图像的背景,地板的部分颜色也是“相同”的。你可能需要重新安排一下你的任务。