OpenCV4Android学习之图像基本特征检测

基于android平台的视觉检测智能相机的实现-opencv4android的应用 本例对于在安卓平台上实现机器视觉算法还是个不错的例子,故将代码和方法放出来。本实例仅用了一点点安卓的知识和opencv4android的函数,供新手参考= =。 阅读详情

图像中的信息包括边缘、直线、椭圆、色块或轮廓、角点等形式,这些信息在计算机视觉和图像处理语境中通常被称为特征。下面就来了解一些结合OpenCV在Android平台上的常规的特征检测算法,这里使用AndroidStudio开发平台,当然Eclipse也一样。如果对在这两个IDE上部署OpenCV不熟悉的话,可以参考我之前写的这篇文章:Eclipse与AndroidStudio关于OpenCV4Android库的部署


1.边缘和焦点检测
边缘检测和角点检测时两种最基本也是非常有用的特征检测算法,这些算法包括高斯差分、Canny边缘检测器、Sobel算子和Harris角点。比如我们想在一幅图中找到不同目标的边界或者角点,用于分析目标在图像中的旋转或移动等情况,这时候就需要知道边缘和角点的信息了。

  • 高斯差分
    这里我们先了解下什么是边缘和高斯模糊方法,因为下面要用到边缘这个性质和对图像进行高斯模糊来计算边缘点,即边缘点。

    • 简单的说,边缘就是图像中像素亮度变化明显的点。
    • 高斯(Gaussian)模糊是最常用的模糊方法,是将指定像素变换为其与周边像素加权平均后的值,权重就是高斯分布函数计算出来的值。OpenCV提供了GaussianBlur()的内置函数,我们可以在应用中使用它执行高斯模糊。这里是一篇关于高斯模糊算法的介绍:高斯模糊算法

    形如:

    Mat src;
    Imgproc.GaussianBlur(src,src,new Size(6,6),0);

    让我们回到高斯差分技术,其算法分成三步:

    • 将图像转换为弧度图像
    • 用两个不同的模糊半径对灰色图像执行高斯模糊
    • 对上面两幅图像相减,得到一副只包含边缘点的结果图像

    在应用中,创建一个用于给定图像计算边缘的函数:

    /**
     * 高斯差分
     */
    private void DifferenceOfGaussian() {
        Mat grayMat = new Mat();
        Mat blur1 = new Mat();
        Mat blur2 = new Mat();
        //将图像转换为灰度
        Imgproc.cvtColor(originalMat, grayMat, Imgproc.COLOR_BGR2GRAY);
        //以两个不同的模糊半径对图像做模糊处理,前两个参数分别是输入和输出图像,第三个参数指定应用滤波器时所用核的尺寸,最后一个参数指定高斯函数中的标准差数值
        Imgproc.GaussianBlur(grayMat, blur1, new Size(15, 15), 5);
        Imgproc.GaussianBlur(grayMat, blur2, new Size(21, 21), 5);
        //将两幅模糊后的图像相减
        Mat DoG = new Mat();
        Core.absdiff(blur1, blur2, DoG);
        //反转二值阈值化
        Core.multiply(DoG, new Scalar(100), DoG);
        Imgproc.threshold(DoG, DoG, 50, 255, Imgproc.THRESH_BINARY_INV);
        //将Mat转换为位图
        Utils.matToBitmap(DoG, currentBitmap);
        loadImageToImageView();
    }
    /**
     * 设置图像
     */
    private void loadImageToImageView() {
        ImageView imgView = (ImageView) findViewById(R.id.image_view);
        imgView.setImageBitmap(currentBitmap);
    }

处理结果图:

高斯差分

  • Canny边缘检测器
    Canny边缘检测器算法使用了多向灰度梯度和滞后阈值化等复杂技巧,它是边缘检测的最优方法。
    算法分为四个步骤:
    • 平滑图:使用合适的模糊半径执行高斯模糊来减少图像内的噪声
    • 计算图像梯度:计算图像梯度,并将其分为垂直、水平和斜对角
    • 非最大值:由图像梯度计算得到梯度方向,检查某一像素在梯度正方向和负方向的局部最大值,然后抑制该像素
    • 用滞后阈值化选择边缘:检查某一条边缘是否明显到足以作为最终输出,最后取出所有不够明显的边缘

下面是OpenCV对该算法在Android上的实现代码:

    /**
     * Canny边缘检测器
     */
    private void Canny() {
        Mat grayMat = new Mat();
        Mat cannyEdges = new Mat();
        //将图像转换为灰度
        Imgproc.cvtColor(originalMat, grayMat, Imgproc.COLOR_RGB2GRAY);
        Imgproc.Canny(grayMat, cannyEdges, 10, 100);
        //将Mat转换回位图
        Utils.matToBitmap(cannyEdges, currentBitmap);
        loadImageToImageView();
    }
    /**
     * 设置图像
     */
    private void loadImageToImageView() {
        ImageView imgView = (ImageView) findViewById(R.id.image_view);
        imgView.setImageBitmap(currentBitmap);
    }

处理结果图:

Canny边缘检测器

  • Sobel算子
    Sobel算子和Canny边缘检测一样,计算像素灰度梯度。
    算法分为四个步骤:
    • 将图像转换为灰度图像
    • 计算水平方向灰度梯度绝对值
    • 计算垂直方向灰度梯度绝对值
    • 计算最终梯度

下面是OpenCV对该算法在Android上的实现代码:

    /**
     * Sobel算子
     */
    private void Sobel() {
        Mat grayMat = new Mat();
        //用来保存结果的Mat
        Mat sobel = new Mat(); 
        //分别用于保存梯度和绝对梯度的Mat
        Mat grad_x = new Mat();
        Mat abs_grad_x = new Mat();
        Mat grad_y = new Mat();
        Mat abs_grad_y = new Mat();
        //将图像转换为灰度
        Imgproc.cvtColor(originalMat, grayMat, Imgproc.COLOR_BGR2GRAY);
        //计算水平方向梯度
        Imgproc.Sobel(grayMat, grad_x, CvType.CV_16S, 1, 0, 3, 1, 0);
        //计算垂直方向梯度
        Imgproc.Sobel(grayMat, grad_y, CvType.CV_16S, 0, 1, 3, 1, 0);
        //计算两个方向上梯度绝对值
        Core.convertScaleAbs(grad_x, abs_grad_x);
        Core.convertScaleAbs(grad_y, abs_grad_y);
        //计算结果梯度
        Core.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 1, sobel);
        //将Mat转换为位图
        Utils.matToBitmap(sobel, currentBitmap);
        loadImageToImageView();
    }
     /**
     * 设置图像
     */
    private void loadImageToImageView() {
        ImageView imgView = (ImageView) findViewById(R.id.image_view);
        imgView.setImageBitmap(currentBitmap);
    }

处理结果图:

Sobel算子

  • Harris角点检测
    Harris焦点检测器是一种在角点检测中最常用的技术,在图像上使用滑动窗口计算亮度的变化。
    下面是OpenCV对该算法在Android上的实现代码:
    /**
     * Harris角点
     */
    private void HarrisCorner() {
        Mat grayMat = new Mat();
        Mat corners = new Mat();
        //将图像转换成灰度
        Imgproc.cvtColor(originalMat, grayMat, Imgproc.COLOR_BGR2GRAY);
        Mat tempDst = new Mat();
        //找出角点
        Imgproc.cornerHarris(grayMat, tempDst, 2, 3, 0.04);
        //在新的图像上绘制角点
        Mat tempDstNorm = new Mat();
        Core.normalize(tempDst, tempDstNorm, 0, 255, Core.NORM_MINMAX);
        Core.convertScaleAbs(tempDstNorm, corners);
        //将Mat转换为位图
        Random r = new Random();
        for (int i = 0; i < tempDstNorm.cols(); i++) {
            for (int j = 0; j < tempDstNorm.rows(); j++) {
                double[] value = tempDstNorm.get(j, i);
                if (value[0] > 150)
                    Core.circle(corners, new Point(i, j), 5, new Scalar(r.nextInt(255)), 2);
            }
        }
        //将Mat转换为位图
        Utils.matToBitmap(corners, currentBitmap);
        loadImageToImageView();
    }
    /**
     * 设置图像
     */
    private void loadImageToImageView() {
        ImageView imgView = (ImageView) findViewById(R.id.image_view);
        imgView.setImageBitmap(currentBitmap);
    }

处理结果图:

Harris角点检测


2.霍夫变换
对于图像分析来说,除了边缘和角点外,还需要检测如直线、圆、椭圆等其他相关形状。例如我们想在一张桌子的图像中检测签字笔等,对于这种情况,一般采用霍夫变换这种技术,它被广泛采用的利用数学等式的参数形式在图像中检测形状的技术。通常我们考虑二维形状的霍夫变换,比如直线和圆,它相对于球体等复杂形状而言更为简单。

  • 霍夫直线
    我们对于霍夫变化一般不会直接对图像执行算法,因为图像中任何一条明显的直线都一定是边缘,反之则不然。OpenCV提供了两种实现霍夫直线的方式:标准霍夫直线和概率霍夫直线。它们的主要区别在于概率霍夫直线选取经过随机采样的边缘点子集,而不是所有的边缘点。因为这种方式处理的点更少,所以这使得算法的执行速度更快,而不会降低算法的效果。
    下面是OpenCV对该算法在Android上的实现代码:

    /**
     * 霍夫直线
     */
    private void HoughLines() {
        Mat grayMat = new Mat();
        Mat cannyEdges = new Mat();
        Mat lines = new Mat();
        //将图像转换成灰度
        Imgproc.cvtColor(originalMat, grayMat, Imgproc.COLOR_BGR2GRAY);
        //这里使用Canny边缘检测技术计算图像中的边缘,使用其他的也可以
        Imgproc.Canny(grayMat, cannyEdges, 10, 100);
        Imgproc.HoughLinesP(cannyEdges, lines, 1, Math.PI / 180, 50, 20, 20);
        Mat houghLines = new Mat();
        houghLines.create(cannyEdges.rows(), cannyEdges.cols(), CvType.CV_8UC1);
        //在图像上绘制直线
        for (int i = 0; i < lines.cols(); i++) {
            double[] points = lines.get(0, i);
            double x1, y1, x2, y2;
            x1 = points[0];
            y1 = points[1];
            x2 = points[2];
            y2 = points[3];
            Point pt1 = new Point(x1, y1);
            Point pt2 = new Point(x2, y2);
            //在一副图像上绘制直线
            Core.line(houghLines, pt1, pt2, new Scalar(255, 0, 0), 1);
        }
        //将Mat转换为位图
        Utils.matToBitmap(houghLines, currentBitmap);
        loadImageToImageView();
    }
    /**
     * 设置图像
     */
    private void loadImageToImageView() {
        ImageView imgView = (ImageView) findViewById(R.id.image_view);
        imgView.setImageBitmap(currentBitmap);
    }

    处理结果图:

    霍夫直线检测

  • 霍夫圆

    与霍夫直线类似,步骤也一样。
    下面是OpenCV对该算法在Android上的实现代码:

    /**
     *霍夫圆
     */
    private void HoughCircles() {
        Mat grayMat = new Mat();
        Mat cannyEdges = new Mat();
        Mat circles = new Mat();
        //将图像转换成灰度
        Imgproc.cvtColor(originalMat, grayMat, Imgproc.COLOR_BGR2GRAY);
       //这里使用Canny边缘检测技术计算图像中的边缘,使用其他的也可以
        Imgproc.Canny(grayMat, cannyEdges, 10, 100);
        Imgproc.HoughCircles(cannyEdges, circles, Imgproc.CV_HOUGH_GRADIENT, 1, cannyEdges.rows() / 15);
        Mat houghCircles = new Mat();
        houghCircles.create(cannyEdges.rows(), cannyEdges.cols(), CvType.CV_8UC1);
        //在图像上绘制圆形
        for (int i = 0; i < circles.cols(); i++) {
            double[] parameters = circles.get(0, i);
            double x, y;
            int r;
            x = parameters[0];
            y = parameters[1];
            r = (int) parameters[2];
            Point center = new Point(x, y);
            //在一副图像上绘制圆形
            Core.circle(houghCircles, center, r, new Scalar(255, 0, 0), 1);
        }
        //将Mat转换为位图
        Utils.matToBitmap(houghCircles, currentBitmap);
        loadImageToImageView();
    }
     /**
     * 设置图像
     */
    private void loadImageToImageView() {
        ImageView imgView = (ImageView) findViewById(R.id.image_view);
        imgView.setImageBitmap(currentBitmap);
    }

处理结果图:

霍夫圆检测


3.轮廓
有时候我们只想关注于感兴趣的目标,这就需要将图像分解成更小的片元,比如我们在一角、五角和一元硬币中分析五角的情况。我们有两种实现途径,一种是使用霍夫圆,另一种就是利用轮廓检测将图像分割为更小的部分,每个部分代表一个特定的硬币。轮廓通常以图像中的边缘来计算,边缘与轮廓的区别在于轮廓是闭合的,边缘可以是任意的。
下面是OpenCV对该算法在Android上的实现代码:

    /**
     * 轮廓检测
     */
    private void Contours() {
        Mat grayMat = new Mat();
        Mat cannyEdges = new Mat();
        Mat hierarchy = new Mat();
        List<MatOfPoint> contourList = new ArrayList<MatOfPoint>(); //A list to store all the contours
        //保存轮廓列表
        Imgproc.cvtColor(originalMat, grayMat, Imgproc.COLOR_BGR2GRAY);
         //这里使用Canny边缘检测技术计算图像中的边缘,使用其他的也可以
        Imgproc.Canny(originalMat, cannyEdges, 10, 100);
        //找出轮廓
        Imgproc.findContours(cannyEdges, contourList, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
        //在新的图像上绘制轮廓
        Mat contours = new Mat();
        contours.create(cannyEdges.rows(), cannyEdges.cols(), CvType.CV_8UC3);
        Random r = new Random();
        for (int i = 0; i < contourList.size(); i++) {
            Imgproc.drawContours(contours, contourList, i, new Scalar(r.nextInt(255), r.nextInt(255), r.nextInt(255)), -1);
        }
        //将Mat转换为位图
        Utils.matToBitmap(contours, currentBitmap);
        loadImageToImageView();
    }
    /**
     * 设置图像
     */
    private void loadImageToImageView() {
        ImageView imgView = (ImageView) findViewById(R.id.image_view);
        imgView.setImageBitmap(currentBitmap);
    }

处理结果图:

轮廓检测


以上就是图像的基本特征在Android设备上实现的不同算法,也是我们在Android相关应用开发中的基础。

Android OpenCV应用篇四:图像特征检测 前几篇我们大致了解了如何运用OpenCV在Android上进行图片但简单处理,并运用这些知识做了一个文字提取的应用。 Android OpenCV应用篇一:环境搭建,高斯差分 Android OpenCV应用篇二:图片处理 Android OpenCV应用篇三:提取图片中的文字 下面我们继续进行了解OpenCV在Android如何进去一些其他方面的应用:图片特征检测 前言 开始之前,... 阅读详情

相关推荐

Android OpenCV图像识别和图像追踪

首先介绍一下OpenCV中图像识别和跟踪机制:        图像跟踪机制是确定矩目标在3D环境中的姿态,并根据此类信息环绕目标对象绘制轮廓线。在最终的2D图像中,考虑到目标可能相对于相机倾斜,因而轮廓线将呈现为四边形(不一定是矩形)。        上述跟踪机制主要包含以下四个步骤:        (1)获取目标特征。这里特征是指从不同的距离或角度进行观察室,维持特征的外观的一点。例如,各

u012500046的专栏 1万+

Android opencv(四)轮廓检测

轮廓检测函数: Imgproc. findContours(image, contours, hierarchy, mode, method) 通过轮廓检测找到面积最大的轮廓并绘制轮廓: List contours=new ArrayList<>(); Imgproc.findContours(blurredImage,contours,new Mat(),I

danfengw的博客 6680

OpenCV4Android图像特征匹配的ORB算法学习指南

计算机视觉领域中,图像特征的检测与匹配是实现各种应用场景的核心技术之一。ORB(Oriented FAST and Rotated BRIEF)算法作为一款性能优良的特征检测和描述方法,因其实时性、旋转不变性和良好的匹配精度等特点,被广泛应用于工业界和学术界。ORB算法是结合了FAST关键点检测和BRIEF描述符的一种改进方法。它在检测图像特征点时,不仅考虑了点的亮度变化,还对特征点的方向性进行了优化。

weixin_42361478的博客 1278

opencv之图像轮廓

图像轮廓指的是图像中物体边缘或形状的外部线条,通常通过图像处理技术来检测和提取。轮廓是用于描述物体形状、进行目标识别、图像分割等操作的重要特征之一。边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。OpenCV提供了查找图像轮廓的函数cv2.findContours(),该函数能够查找图像内的轮廓信息,而函数cv2.drawContours()能够将轮廓绘制出来。

hola173841439的博客 2384

VisualStudio2022启动报错

把Users\...\AppData\Local\Microsoft\VisualStudio\11.0\ComponentModelCache中的Microsoft.VisualStudio.Default.cache这个文件移除,再重启vs,各项功能都能正常使用了。第一次使用方法1有效果,不知道什么原因后面又报错再删除缓存文件无效了,最后使用方法2启动VS成功。vs2022启动时,报错弹框,在ActivityLog查看具体报错信息,报错原因未知。网上搜索到两种解决方法。方法1:删除缓存文件。

面朝大海,春暖花开 3936

SpeedyBee F405 V3 50A飞塔装机全攻略:从开箱到首飞避坑指南

本文提供SpeedyBee F405 V3 50A飞塔的详细装机指南,涵盖从开箱检查、硬件焊接、软件配置到安全首飞的全流程。重点剖析了电源连接、固件刷写等高频故障点,帮助FPV新手避开常见陷阱,确保一次成功组装并安全起飞。

weixin_29179311的博客 416

Android OpenCV(二)主体识别 位置检测

工作中遇到需要通过OpenCV找到图片主体体积占图片百分比的比例,这里做一个问题解决思路的记录。该方面新手小白,有不对的地方可以评论指出哈。

魔都大白 2239

06-esp32-idf开发调试方法(内置JTAG,OpenOCD调试)

使用VS Code和ESP-IDF进行ESP32开发和调试 在我们搭建 **IDF** 框架后,**OpenOCD** 已经自动下载好了, 我们通过 **JTAG** 接口连接使用 **OpenOCD** 进行调试。而**ESP32**芯片中内置 了**JTAG** 电路,无需额外芯片即可调试,更加方便,所以这里我们讲解使用模块自带的usb-jtag接口进行调试。

宁子希的博客 1万+

OpenCv Android常用的图像操作

项目中使用OpenCv Android SDK(版本4.5.4)进行图像处理,支持的操作很全且效果佳,对于其中的一些图像操作方法记录如下: Mat与Bitmap Mat是OpenCv中用来存储图像信息的内存对象,内部还包括图像的宽、高、类型、维度、大小、深度等信息。 int width = srcMat.cols(); int height = srcMat.rows(); int dims = srcMat.dims(); //维度 int channels = srcMat.channels();

有何不可的博客 3875

VS Code+ESP-IDF开发避坑指南:头文件标红报错的5种解决方法(附CMakeLists.txt配置)

本文详细解析了在VS Code中使用ESP-IDF开发ESP32时头文件标红报错的5种解决方法,包括环境配置检查、CMakeLists.txt规范配置、路径解析策略、缓存清理技巧和高级调试手段。特别提供了CMakeLists.txt的实战配置示例,帮助开发者彻底解决头文件路径问题,提升开发效率。

weixin_33670786的博客 559

mmpretrain学习笔记

(4)数据集路径 data_root=‘data/imagenet’–》data_root=‘data/Fruits Dataset/images’(7)适当的修改num_workers、epochs、batch_size、lr等。3、训练优化 :梯度下降算法、学习率参数、训练总轮次、学习率变化策略等。my_resnet18_8xb32_in1k.py 完整的配置文件。(6)split=‘train’、split='val’注释掉。2、数据:数据集划分、数据文件路径、批大小、数据增强策略等。

吃葡萄不吐葡萄皮 936

<opencv for android 入门积累>Findcontours函数在android中的使用

Imgproc.findContours函数 这个函数使用的时候后两个参数和电脑版的不同,mode和method两项与电脑版开发相比要去掉”CV_“ 函数的用法和windows下基本一致,就不具体写了。一个例子: Imgproc.findContours(binaryMat,contours,new Mat(),Imgproc.RETR_LIST,Imgproc.CHAIN_APPROX_

lulumi2016的博客 1503

VFIO框架源码分析(一)- 从初始化到设备访问

本文深入剖析了Linux内核中的VFIO(Virtual Function I/O)框架,详细解读了其从初始化到设备访问的全过程。VFIO通过Container->Group->Device的层次化设计,利用IOMMU提供安全隔离,允许用户空间直接访问物理设备。文章基于Linux v5.15版本,重点分析了vfio_init模块入口、Container创建与配置、Group关联以及最终设备访问等关键环节,揭示了VFIO如何通过逐层授权机制构建安全可靠的设备直通模型,为虚拟化技术提供核心支持。

qq_36071928的博客 380

使用 OpenCV for Android 进行图像特征检测

android 开发人员,可能熟悉使用activities, fragments, intents以及最重要的一系列开源依赖库。但是,注入需要本机功能的依赖关系(如计算机视觉框架)并不像在 gradle 文件中直接添加实现语句那样简单!今天,将专注于使用 OpenCV 库,将其作为依赖项注入到你的 android 应用程序中。那么,我们将从这次讨论中得到什么?我们将能够创建一个 android ...

深度学习与计算机视觉 2231

pi-coding-agent 完整详解

pi-coding-agent是一个由Mario Zechner开发的专业AI编程助手,基于Node.js和TypeScript构建。核心功能包括:1)多级思考模式(ThinkingLevel),从none到ultra控制推理深度;2)对话压缩(compaction)管理长对话记忆;3)WebSocket实时通信支持流式交互。该智能体支持代码生成、调试、重构等专业编程任务,采用AI Agent架构,具备工具调用和多轮记忆能力。项目结构通常包含server、agent、config等模块,可通过二次开发扩展功

大坡3D软件开发 2412

mapbox高阶,加载倾斜摄影

本文详细介绍如何基于mapbox-gl v3.8.0版本实现倾斜摄影的加载,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 344

Android Studio使用OpenCV进行图像基本处理

Android Studio使用OpenCV进行图像基本处理

Woshikunlong的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android-拍照后使用OpenCV进行图像模糊度检测

文章目录通过计算方差判断图像是否模糊所需依赖思路描述实现前的准备模板模板子类接口工具类OpenCvUtilBmpUtilCameraUtil布局文件activity_blur_detect_page.xml 界面dialog_blur.xml 对话框实现效果 通过计算方差判断图像是否模糊 所需依赖 图像加载库:Glide 在gradle.properties 文件中添加 implementation 'com.github.bumptech.glide:glide:4.12.0' annota

qq_45649717的博客 5603

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android学习笔记之——基于opencv的图像处理

之前博文《Android学习笔记之——基于Android的opencv开发(Android studio3.6+opencv4.3.0开发环境搭建)》以及《Android学习笔记之——opencv开发进一步探索》已经介绍了基于Android的opencv开发,本博文继续学习一下 参考资料 https://www.cnblogs.com/tail/p/4618790.html(Android Studio使用OpenCV后,使A...

gwpscut的博客 2827

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android上跑OpenCV

安装JDK 网上一堆教程:略。 安装Android Studio 网上一堆教程:略。 安装OpenCV4Android 到opencv官网下载地址下载opencv4android包。这边下载3.4.4版本的Android pack。 下载后解压可以看到以下几个文件。 apk:opencv已经编译好的Android可执行程序,拷贝到手机上即可运行。 samples:生成这些a...

楷尘·极客 6784

基于Opencv4.4的YOLOv4目标检测

2020年7月18日,OpenCV官网发布了OpenCV的最新版本OpenCV4.4.0,令我比较兴奋的是,其中支持了YOLOv4,之前的一段时间,我都在YOLO系列苦苦挣扎,虽然YOLOv4的性能很好,准确率也高,但当时opencv不支持,就导致在QT做界面时,读取不了yolov4的权重,无法进行目标检测,后来无奈只能选择了yolov3。 虽然用pytorch-yolov4也能得到很好的效果,但那样训练出来的权重文件后缀是pth,这么做,只能选择PyQT去做界面,考虑到Python的运行速度远不及C++.

boss-dog 3774

android openCV检测图像的基本特征,包括Canny边缘检测、Harris角点检测、霍夫直线检测-基于Android studio

实现平台:windows下的Android studio1.4 依赖库:openCV3.1.0 程序安装平台:Android6.0 实现的功能:从手机中选择一张图片,检测图片的基本特征,通过menu菜单选择要检测的特征,包括Canny边缘检测、Harris角点检测、霍夫直线检测 说明:对于检测图像的基本特征的算法就不加以详细说明了,网上的资料很多,现在这里主要介绍算法以及代码的编写

wangshuailpp的博客 5586

android opencv画轮廓,Android+OpenCv4实现边缘检测及轮廓绘制出图像最大边缘

实现步骤:图像灰度化边缘检测根据Canny检测得出来的Mat寻找轮廓算出最大轮廓周长or面积根据获取到的最大轮廓下标进行轮廓绘制画出最大矩形,并返回RectCanny边缘检测基于Canny算法的边缘检测主要有5个步骤,依次是高斯滤波、像素梯度计算、非极大值像素梯度抑制、滞后阈值处理和孤立弱边缘抑制。Canny在有噪声的情况下表现好不好,取决于前面的降噪过程,可以手动做高斯处理提高识别率。/**im...

weixin_36258014的博客 1108

安卓学习笔记-unity调用原生opencv的sdk

保存本地图片的方法我是在网上扒的,网上在安卓10以后都可以访问到DCIM文件夹了,他们也大多都是使用的这个方法,但unity是不支持访问这些路径的,所以我还是改成了保存到报名下的私有路径中,这样unity就可以直接通过Application.persistdatapath这个api去访问文件了。,然后打包运行,会出现一个显示相机画面的界面,检测到人脸就会自动在人脸的部分绘制一个框框,这和unity的插件效果是一致的,然后打包到安卓主板(3588和3568)上进行测试,也是可以正常检测到的。

pure81的博客 2079

opencv android二值化,OpenCV4Android实现图像二值化

最近在学习OpenCV4Android,需要实现对图像二值化处理,找了很多的资料和文献都没有找到需要的,还好看到了winorlose2000 写的文章,这里表示感谢!接下来贴出自己的源代码,希望和大家交流,不妥之处还请指正啊!程序调用了OpenCV4Android 2.4.9,低版本应该也可以实现。使用JNI编程。xmlns:tools="http://schemas.android.com/to...

weixin_39691055的博客 371
上一篇: Eclipse与AndroidStudio关于OpenCV4Android库的部署
下一篇: OpenCV4Android学习之图像特征匹配算法
gulingfengze
博客等级 码龄12年 177粉丝 38原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值