文章目录
前言
参考书籍:《OpenCV3编程入门_毛星云编》
个别函数
1、imread
原型:
Mat immread(filename , int flags = 1 );
参数二,指定一个加载图像颜色的类型,默认为1。
此参数可以用标识符代替:
标识符 | 等价取值 | 含义 |
---|---|---|
CV_LOAD_IMAGE_UNCHANGED | -1 | 已抛弃 |
CV_LOAD_IMAGE_GRAYSCALE | 0 | 转换成灰度图 |
CV_LOAD_IMAGE_COLOR | 1 | 载入彩色图像 |
CV_LOAD_IMAGE_ANYDEPTH | 2 | 。。。没看懂啥意思 |
2、颜色空间转换 cvtColor()
cvtColor( src , dst , int code , int cstCn = 0 )
第一个参数为输入图像
第二个参数为输出图像
第三个参数为颜色空间转换标识符
第四个参数为目标图像的通道数,若为0,则取原图的通道数
OpenCV默认的图片通道存储顺序是BGR,即蓝绿红,而不是RGB
3、split分离通道函数
#include<iostream>
#include<vector>
using namespace std;
using namespace cv;
vector(Mat) channels;
int main(){
Mat frame;
frame = imread("11");
split(frame,channels);
imageROIB = channels.at(0);//分成BGR三个通道
imageROIG = channels.at(1);
imageROIR = channels.at(2);
return 0;
}
注:
vector是C++里的一个容器,此处用于承接矩形。
vector使用命名空间std;
vector是STL的动态数组,可以在运行中根据需要改变数组的大小。
C一般用其中的Mat::at()方法对某个通道进行存取,也就是这样用:channels.at(0)
4、图像相减absdiff
absdiff(imageROIB,imageROIR,minor);//红蓝通道相减
参数一、二代表图像,两图像的像素分别相减并取绝对值,得到参数三的图像
5、图像二值化threshold
threshold(minor,pic2,10,255,THRESH_BINARY);
参数一表示原图
参数二表示二值化后得到的图
参数三表示阈值
参数四表示超过阈值所赋的值
参数五表示二值化的类型,此处为标准类型
6、图像的相加addWeighted
addWeighted(pic1,0.5,pic2,0.5,0,pic);
参数 | 含义 |
---|---|
1 | 图1 |
2 | 所占权值 |
3 | 图二 |
4 | 所占权值 |
5 | 附加值 |
6 | 得到的图像 |
附加值是啥?
像素值=图一*相应权值+图二 * 相应权值+附加值
类
一、Mat类
1、构建mat对象
(1)Mat()
Mat M(2,2,8UC3,Scalar(0,0,255));
对于二维多通道图像,首先定义尺寸(行、列);
接着,指定储存元素的数据类型以及每个矩阵点的通道数;
下列规定:CV_[位数][带符号与否][类型前缀]C[通道数]
如CV_8UC3:使用8位unsigned char型,每个像素由三个元素组成三通道。
Scalar用于表示颜色。
Scalar()表示具有四个元素的数组,被大量用于传递像素值。如RGB颜色值,但RGB只有三个参数。对于Scalar,如果用不到第四个参数,则不需要写出来;只写三个参数,opencv会认为我们只想要表示三个参数。
例子:
Scalar( a , b , c );
那么定义的RGB颜色值:红色分量为c,绿色分量为b,蓝色分量为a。(bgr的顺序对应abc)