iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android+OpenCv4如何实现边缘检测及轮廓绘制出图像最大边缘
  • 799
分享到

Android+OpenCv4如何实现边缘检测及轮廓绘制出图像最大边缘

2023-06-15 03:06:03 799人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关Android+OpenCV4如何实现边缘检测及轮廓绘制出图像最大边缘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现步骤:图像灰度化边缘检测根据Canny检测得出来的Mat

这篇文章将为大家详细讲解有关Android+OpenCV4如何实现边缘检测及轮廓绘制出图像最大边缘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

实现步骤:

  • 图像灰度化

  • 边缘检测

  • 根据Canny检测得出来的Mat寻找轮廓

  • 算出最大轮廓周长or面积

  • 根据获取到的最大轮廓下标进行轮廓绘制

  • 画出最大矩形,并返回Rect

Canny边缘检测

基于Canny算法的边缘检测主要有5个步骤,依次是高斯滤波、像素梯度计算、非极大值像素梯度抑制、滞后阈值处理和孤立弱边缘抑制。Canny在有噪声的情况下表现好不好,取决于前面的降噪过程,可以手动做高斯处理提高识别率。

public static void Canny(Mat image, Mat edges, double threshold1, double threshold2, int apertureSize, boolean L2gradient)

使用

    public static Mat canny(Bitmap bitmap) {        Mat mSource = new Mat();        Utils.bitmapToMat(bitmap, mSource);        Mat grayMat = new Mat();        Imgproc.cvtColor(mSource,grayMat,Imgproc.COLOR_BGR2GRAY);//转换成灰度图        Mat mat = mSource.clone();        Imgproc.Canny(mSource, mat, 75, 200);        return mat;    }

Android+OpenCv4如何实现边缘检测及轮廓绘制出图像最大边缘

获取图像最大矩形

       public  Rect findMaxRect(Mat cannyMat) {        Mat tmp = mSource.clone();        List<MatOfPoint> contours = new ArrayList<MatOfPoint>();        Mat hierarchy = new Mat();        // 寻找轮廓        Imgproc.findContours(cannyMat, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHaiN_APPROX_SIMPLE);        int index = 0;        double perimeter = 0;        // 找出匹配到的最大轮廓        for (int i = 0; i < contours.size(); i++) {            // 最大面积//            double area = Imgproc.contourArea(contours.get(i));            //最大周长            MatOfPoint2f source = new MatOfPoint2f();            source.fromList(contours.get(i).toList());            double length = Imgproc.arcLength(source,true);            if(length>perimeter){                perimeter =  length;                index = i;            }        }                      Imgproc.drawContours(                tmp,                contours,                index,                new Scalar(0.0, 0.0, 255.0),                9,                Imgproc.LINE_AA        );        Rect rect = Imgproc.boundingRect(contours.get(index));//        Imgproc.rectangle(tmp, rect, new Scalar(0.0, 0.0, 255.0), 4, Imgproc.LINE_8);        showImg(tmp);        return rect;    }      private void showImg(Mat mat){        Bitmap bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888);        Utils.matToBitmap(mat, bitmap);        mIvSrc.setImageBitmap(bitmap);        mat.release();    }

最终效果图

Android+OpenCv4如何实现边缘检测及轮廓绘制出图像最大边缘

获得矩形坐标点以后,后期可以做裁剪,旋转之类操作,可以自行研究。

Android是什么

Android是一种基于linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发

关于“Android+OpenCv4如何实现边缘检测及轮廓绘制出图像最大边缘”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Android+OpenCv4如何实现边缘检测及轮廓绘制出图像最大边缘

本文链接: https://www.lsjlt.com/news/277100.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android+OpenCv4实现边缘检测及轮廓绘制出图像最大边缘
    实现步骤: 图像灰度化 边缘检测 根据Canny检测得出来的Mat寻找轮廓 算出最大轮廓周长or面积 根据获取到的最大轮廓下标进行轮廓绘制 ...
    99+
    2024-04-02
  • Android+OpenCv4如何实现边缘检测及轮廓绘制出图像最大边缘
    这篇文章将为大家详细讲解有关Android+OpenCv4如何实现边缘检测及轮廓绘制出图像最大边缘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现步骤:图像灰度化边缘检测根据Canny检测得出来的Mat...
    99+
    2023-06-15
  • 怎么利用Python+OpenCV实现简易图像边缘轮廓检测
    本篇内容主要讲解“怎么利用Python+OpenCV实现简易图像边缘轮廓检测”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么利用Python+OpenCV实现简易图像边缘轮廓检测”吧!函数基础...
    99+
    2023-06-30
  • 如何利用Python+OpenCV实现简易图像边缘轮廓检测(零基础)
    目录前言函数基础与三方库cv.threshold(pic,thresh,maxvalue,model)cv.findContours(待处理图片,model(提取模式),method...
    99+
    2024-04-02
  • Python中图像边缘检测算法如何实现
    这篇“Python中图像边缘检测算法如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中图像边缘检测算法如何...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作