• OpenCV的介绍以及常用方法(Java)


    概念

    OpenCV

    OpenCV 是 Intel 开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。
    OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API。它不依赖于其它的外部库 —— 尽管也可以使用某些外部库。OpenCV 对非商业应用和商业应用都是免费(FREE)的。
    OpenCV是计算机视觉中经典的专用库,其支持多语言、跨平台,功能强大。 OpenCV-Python为OpenCV提供了Python接口,使得使用者在Python中能够调用C/C++,在保证易读性和运行效率的前提下,实现所需的功能。 OpenCV-Python Tutorials是官方提供的文档,其内容全面、简单易懂,使得初学者能够快速上手使用。

    Mat类型

    任何情况下,我们(人类)看到的都是图像。然而,当将其转换到数字设备时,我们记录的是图像每个点的数值。
    Mat类表示一个 n 维密集数值单通道或多通道数组,它可用于存储图像。
    在这里插入图片描述

    API

    简洁版

    • copyTo方法

      image.copyTo(dist,mask);

      原图片image经过mask掩膜生成目标图片dist,其中的三个参数都是Mat类型

    • imread方法

      Mat image = Imgcodecs.imread(“F://all//1.jpg”);

      读取一张图片,返回一个Mat类型

    • imWrite方法

      根据Mat类型的图片,生成一张真实的图片

    • opencv的矩形区域裁剪

      • 方式1:用Range

                Mat img = Imgcodecs.imread(strFrom, Imgcodecs.IMREAD_UNCHANGED);  //获取原图
        
        //  选择ROI区域方式1,这两个参数代表x或y某一个方向上的起始位置和结束位置,单位是像素
        //        Range range = new Range(250, 800);
        //        Mat ROI1 = new Mat(anima, range);
        //        Imgcodecs.imwrite("C:\\Users\\Administrator\\Desktop\\temp\\station_11\\22.jpg", ROI1);
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
      • 方式2:用Rect

                //选择ROI区域方式2:矩形区域
                Rect rect = new Rect(50, 50, 200, 250);
                Mat ROI = new Mat(img, rect);
                Imgcodecs.imwrite(strTo, ROI);
        
        • 1
        • 2
        • 3
        • 4

    详细版

    imgcodecs模块

    https://blog.csdn.net/antony1776/article/details/124226493

    imgcodecs = image + codec,由名称可知,肯定与图像的编解码有关,opencv 通过该模块,能够完成:

    • 对各种格式类型的图片进行解码,载入并创建 生成对应的 Mat 对象,
    • 或者,将程序中的 Mat 对象,输出为指定格式的图片文件。

    imread函数

    http://t.zoukankan.com/mangoroom-p-10999151.html

    Imgcodecs的imread方法,负责读取图像

    可以看到,imread函数原型非常简单,可以总结为三点

    • 返回值,Mat 类型, 即返回读取的图像,读取图像失败时返回一个空的矩阵对象(Mat::data == NULL)
    • 参数1 filename, 读取的图片文件名,可以使用相对路径或者绝对路径,但必须带完整的文件扩展名(图片格式后缀)
    • 参数2 flags, 一个读取标记,用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什么颜色格式读取图片有关,默认值为IMREAD_COLOR

    参数1、参数2的具体取值参考链接

    imencode函数

    Imgcodecs的imencode方法,将图像编码到内存缓冲区中。

    压缩图像,并将其存储在内存缓冲区中,该缓冲区的大小可根据需要进行调整

    结果。有关支持的格式和标志说明的列表,请参阅cv::imwrite。

    和imwrite方法的区别???

    imwrite函数

    Imgcodecs类的imwrite()方法,该方法一个重要构造器如下:

    imwrite(filePath, Mat):第一个参数为待写入的文件路径,第二个为Mat对象

    fillPoly函数

    Imgproc的fillPoly方法,填充多边形

    有多个重载函数,这里就说明3个参数的fillPoly函数

    fillPoly(Mat img, List pts, Scalar color)
    
    • 1
    • img是原图片的mat格式
    • pts:多边形阵列,其中每个多边形表示为点阵数组。
    • color:颜色,通过Scalar指定RGB的值

    例子

    Imgproc.fillPoly(mask, maskArea, new Scalar(255, 255, 255));//填充多边形,mask,定义成白色
    
    • 1

    copyTo函数

    Mat中的成员方法,作用:将当前Mat对象复制到目标Mat对象中

    //1.将当前对象复制到m中
    public void copyTo(Mat m)
    //2.将当前对象根据掩膜mask生成新的对象m
    public void copyTo(Mat m,Mat mask)
    
    • 1
    • 2
    • 3
    • 4

    其中m为待填充的对象

    变量mask中非0的像素表示待复制的像素

    使用:

    • 拷贝
    A.CopyTo(B); // B 与 A 矩阵一模一样,改变任何一个,互不影响
    
    • 1
    • 掩膜操作
    A.CopyTo(B,M);// 把与M中非0像素,相同位置的A中像素copy到B中同一位置
    // M  必须是CV_8U, 可以是单通道或多通道
    
    • 1
    • 2

    前置
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c8EDraqz-1658905893415)(img/image-20220527134250899.png)] 1. 下载Opencv的jar包2. 找到这个jar包的x64文件夹的路径,放到VM options中(或者将dll文件放到jdk的bin目录 中)在这里插入图片描述

    参考链接

    opencv-java官网:https://opencv-java-tutorials.readthedocs.io/en/latest/
    opencv-py:http://www.woshicver.com/

  • 相关阅读:
    Java中的::
    java基于ssm的体育馆票务管理系统
    技术与业务同等重要,偏向任何一方都是错误
    网红探店一般怎么收费?找网红探店该如何筛选博主
    ARM 学习笔记2 初识Cortex-M33与STM32G4
    mongo数据同步的三种方案
    java 面试 英语自我介绍
    Mac M2/M3 芯片环境配置以及常用软件安装-前端
    为什么 NGINX 的 reload 命令不是热加载?
    Nacos注册中心和服务消费方式
  • 原文地址:https://blog.csdn.net/Supreme7/article/details/125998287