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);
      
    • 方式2:用Rect

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

详细版

imgcodecs模块

blog.csdn.net/antony1776/…

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

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

imread函数

t.zoukankan.com/mangoroom-p…

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<MatOfPoint> pts, Scalar color)
  • img是原图片的mat格式
  • pts:多边形阵列,其中每个多边形表示为点阵数组。
  • color:颜色,通过Scalar指定RGB的值

例子

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

copyTo函数

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

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

其中m为待填充的对象

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

使用:

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

参考链接

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

猜你喜欢

转载自juejin.im/post/7124918539961499661