Mat类:
是用于保存图像以及其他矩阵数据的数据结构。
图像载入函数imread():
Mat imread(const string& filename, int flags=1);
- filename表示图像载入的路径;
- flags为载入标识。
- flags=0 将图像转换为灰度再返回;
- flags=1 将图像转换成彩色再返回;
- flags=2 若载入图像的深度是16位或者32位,就返回对应的图像深度,否则,将图像转换为8位图像再返回。
- flags=2|4 载入最真实无损的源图像
若flags不在枚举类型当中,flags>0 返回一个三通道的彩色图像;flags=0 返回灰度图像;flags<0 返回包含Alpha通道的加载图像。
图像显示函数imshow():
void imshow(const string& winname, InputArray mat);
- winname填写要显示的窗口标识名称;
- mat填需要显示的图像。
输出图像到文件imwrite():
bool imwrite(const string& filename, InputArray img, const vector& params=vector());
- 第一个参数filename表示要写入的文件名
- 第二个参数img表示Mat类型的图像数据
创建窗口函数namedWindow():
void nameWindow(const string& winname, int flags=WINDOW_AUTOSIZE);
通过指定的名字,创建一个可以作为图像和进度条的容器窗口。如果具有相同名称的窗口已经存在,则函数不做任何事情;
- winname填写被用作窗口的标识符的窗口名称
- flags是窗口的标识。
- flags=WINDOW_NORMAL 用户可以改变窗口的大小;
- flags=WINDOW_AUTOSIZE 窗口会自动调整以适应 所显示的图像,并且用户不能手动改变窗口的大小。
namedWindow()函数一般有默认值WINDOW_AUTOSIZE,所以这个函数填写一个变量就行了。
滚动条得到创建和使用createTrackbar()函数getTrackbarPos()函数:
int createTrackbar(conststring& trackbarname, conststring& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata = 0);
- 第一个参数trackbarname表示轨迹条的名字;
- 第二个参数winname表示轨迹条所在窗口的名字;
- 第三个参数value表示滑块当前的位置;
- 第四个参数count表示滑块合一到达的最大位置, 滑块的最小位置始终为0;
- 第五个参数onChange表示指向回调函数的指针,每次滑块位置改变的时候,这个函数都会进行回调。并且 这个函数的 原型必须为void XXXX(int, void*);其中第一个参数是轨迹条的位置,第二个参数是用户数据。如果回调是NULL指针,则表示没有回调函数的调用;
- 第六个参数userdata表示用户传给回调函数的数据,用来处理轨迹条事件。有默认值为0。
int getTrackbarPos(conststring& trackbarname, conststring& winname);
- 第一个参数trackbarname表示 轨迹条的名字;
- 第二个参数winname表示轨迹条的父类窗口的名称。
感兴趣区域ROI(region of interest):
方法一:Mat imageROI=image(Rect(500, 250, logo.cols, logo.rows));
方法二:Mat imageROI=image(Range(250,250+logo.rows), Range(500, 500+logo.cols));
计算数组加权和addWeighted()函数:
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int =-1);
- 第一个参数src1表示需要加权的第一个数组, 通常填写一个Mat;
- 第二个参数alpha表示第一个数组的权重;
- 第三个参数src2表示需要加权的第二个数组,他需要和第一个数组 具有相同的尺寸和通道数;
- 第四个参数beta表示第二个数组的权重;
- 第五个参数gamma表示一个加到权重总和上的标量值,通常写的都是0.0;
- 第六个参数dst表示输出的数组,它和输入的两个数组拥有相同的 尺寸和通道数;
- 第七个参数type表示输出阵列的可选深度,通常为默认值type=-1。
颜色空间转换ctvColor()函数:
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0);
- 第一个参数src表示输入图像;
- 第二个参数dst表示输出图像;
- 第三个参数code表示颜色空间转换的标识符;
- 第四个参数dstCn表示为目标图像的通道数,有默认值dstCn=0,表示目标图像取源图像的通道数。
通道分离split()函数;
void split(const Mat& src, Mat* mvbegin);
void split(InputArray m, OutputArrayofArray mv);
- 第一个参数表示需要进行分离的多通道数组;
- 第二个参数表示函数 输出数组或输出的vector容器。
通道合并merge()函数:
void merge(const Mat* mv, size_t count, OutputArray dst)
void merge(InputArrayOfArray mv, OutputArray dst);
- 第一个参数mv表示需要被合并的输入矩阵或vector容器的阵列,mv参数中所有矩阵必须拥有一样的尺寸;
- 第二个参数count表示当mv为空白的C数组时,代表输入矩阵的个数,通常可以省略不写;
- 第三个参数dst表示输出矩阵,和mv拥有一样的尺寸和深度