OpenCV入门教程01.09:常用类
索引地址:系列索引
Mat
Mat对象是OpenCV中最常用的一种数据结构,它是一个容器,存储任何通道任何数值的图片数据。简单来说,它是放在内存中的JPG图片。使用完成后,内存自动释放。
Mat()对象的六种创建方法和用法:
1 |
|
终端输出为:
1 |
|
感兴趣区域
ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为ROI。在Halcon、OpenCV、Matlab等机器视觉软件上常用到各种算子(Operator)和函数来求得ROI,并进行图像的下一步处理。
简单来说,我需要的就是ROI,可以是算法算出来的,也可以是我指定的一片区域。
测试代码
1 |
|
测试结果:
多张图片合并显示
imshow行数一次只能显示一个Mat对象,一个Mat对象对应一张图片,如果需要显示多张图片,就需要一些操作。最常用的操作是将图片缩小然后利用roi原理移至对应的位置,这样就是在一个Mat中有多个Mat数据,再用imshow显示这一个Mat。
测试代码:
1 |
|
运行结果:
颜色通道
所谓通道,即路。每条路上有不同的数据,如果只有一条路(单通道)就组成二值图,即值只有0和255;如果是三通道,由R(ed)G(reen)B(lue)组成,就成了最常见的彩色图,三通道也有可能是其他组成,比如YUV。
OpenCV中颜色通道由CV_8UC1等表示:8表示数据有8位(00000000);UC表示unsigned char,即无符号整数,那么数据值为0-255;1表示1通道。CV_8UC1表示一张灰度图。float是32位的,对应数据结构参数就是:CV_32FC1,CV_32FC2,CV_32FC3…double是64位,对应数据结构参数:CV_64FC1,CV_64FC2,CV_64FC3等。
以上是最常用的RGB表示法,还有HVI表示法等等。如果不同通道类型的图片需要转换使用,使用函数cvColor()。
cvtColor()
函数作用:转换图像的颜色,彩色-灰度,HSV 等等
函数调用形式:
1 |
|
参数说明:
- InputArray src:输入图像
- OutputArray dst:输出图像
- int code:表示图像转换的类型;<彩色图像—灰度图像>CV_RGB2GRAY,CV_BGR2YCrCb, CV_RGB2YCrCb, CV_YCrCb2BGR, CV_YCrCb2RGB,CV_BGR2HSV, CV_RGB2HSV, CV_HSV2BGR, CV_HSV2RGB
- int dstCn=0:表示输出图像的通道,如果是0表示跟输入图像的通道数一样
测试代码:
1 |
|
效果:
Scalar
函数原型:
1 |
|
默认四个参数,其中两个是有默认值的,分别对应RGBA四个参数。通过其可以设置一个颜色。
默认使用方法是:
1 |
|
上面的代码表示:创建一个2通道,且每个通道的值都为(1,3),深度为32,7行7列的图像矩阵。CV_32F表示每个元素的值的类型为32位浮点数,C2表示通道数为2,Scalar(1,3)表示对矩阵每个元素都赋值为(1,3),第一个通道中的值都是1,第二个通道中的值都是3。
测试代码1:
1 |
|
编译运行以上代码输出如下,可以发现最后一个矩阵是4通道的,但是我们在初始化的时候只给出了三个通道的值,所以第四个通道的值都默认为0。
1 |
|
测试代码2:
1 |
|
编译之后再终端运行,点击一次之后显示一张结果,连点三下之后显示三个结果,点击第四下自动关闭运行界面。
相信读到这你已经明白Scalar是用来干什么的了,它将各个通道的值构成一个整体,赋给具有相同通道数的矩阵元素。
Rect()
一个矩形对象,是一个面,面由点组成。最基本的包括x,y,width,height,即在x轴起点(一般为0)y轴起点(一般为0)宽度和高度。
此对象还有面积,是否包含点等。
函数原型:
1 |
|
也就是说Rect()是用int类型实例化的Rect_,那么我们具体看一下Rect_的函数原型。
1 |
|
就是一个面最基本的,左上角x,y的起始点,然后是宽度和高度。可以用于指定上图中的黑色方框。也就是说,可以用于获取一张图片中某个子图片。
CvRect和Rect有什么区别呢?没什么区别,CvRect是C的函数,Rect是C++。
以下是Rect的常用用法:
1 |
|
测试效果如图:
两幅图像的&
和|
操作之后在介绍。
Size()
查询Size()的官方参考手册可得:
1 |
|
查看Size_<_TP>
详细信息:
1 |
|
除了构造函数之外,还有公有属性,重载运算符函数,以及一些属性函数等等。size表示一张图片的尺寸,即宽(width/cols)高(height/rows)。
此对象还可以获取图片面积(宽×高),长宽比(宽/高),是否是空图片等等。
对于OpenCV4来说,我们关心的只是其最基本的属性,宽高,有可能用到面积等。
Point()
Point()函数用于描述图片上面的二维点,比如Point(0,0)表示左上角的坐标原点。
下图为OpenCV坐标系,右横向为x轴正向。
使用方法1:
1 |
|
测试输出为:
1 |
|
输出中的百分号表示终端输出结束。
使用方法2:操作图片上面的某个点。
在后续介绍中在说。