本文已参与「新人创作礼」活动,一起开启掘金创作之路。
概念
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模块
imgcodecs = image + codec,由名称可知,肯定与图像的编解码有关,opencv 通过该模块,能够完成:
- 对各种格式类型的图片进行解码,载入并创建 生成对应的 Mat 对象,
- 或者,将程序中的 Mat 对象,输出为指定格式的图片文件。
imread函数
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/