opencv视觉学习温习(一)

一:编写opencv程序预处理三件套

#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;

二:开胃菜
用来存放图像数据的工具:Mat

 Mat picture=imread("H:/final/fffff/111.jpg");

其中picture为变量名,将图片保存到变量中,二imread读取图片。

三:简单读取图片三步走

#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
Mat picture=imread("H:/final/fffff/111.jpg");
// 创建一个名为 "游戏原画"窗口
namedWindow("游戏原画",0);
// 在窗口中显示游戏原画
imshow("游戏原画",picture);
// 等待6000 ms后窗口自动关闭
waitKey(6000);
}

第一部分就是Mat和imread()读取,imread()第二的参数默认为1,如果是0则转换为灰色图片,另外199表示3通道彩色图像;
第二就是nameedWindow创建一个窗口;
第三就是imshow显示,其第一参数为第二步建立的窗口名称,第二参数为Mat的变量名。

四: 输出图像到文件——imwrite函数(待补充)

五:感兴趣区域(ROI,region of interest)

在图像处理领域,我们常常需要设置感兴趣区域(ROI,region of interest),来专注或者简化我们的工作过程 。也就是从图像中选择的一个图像区域,这个区域是我们图像分析所关注的重点。我们圈定这个区域,以便进行进一步处理。

定义ROI区域的两种方法:
1:使用cv:Rect,cv::Rect表示一个矩形区域。指定矩形的左上角坐标(构造函数的前两个参数)和矩形的长宽(构造函数的后两个参数)就可以定义一个矩形区域。

//定义一个Mat类型并给其设定ROI区域
Mat imageROI;
//方法一
imageROI=image(Rect(500,250,logo.cols,logo.rows));

2:指定感兴趣行或列的范围(Range),Range是指从起始索引到终止索引(不包括终止索引)的一连段连续序列。cv::Range可以用来定义Range。

//方法二
imageROI=srcImage3(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));

(插播waitKey()函数详解

六:线性混合操作
addWeighted函数:

 void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);

第一个参数,InputArray类型的src1,表示需要加权的第一个数组,常常填一个Mat。
第二个参数,alpha,表示第一个数组的权重
第三个参数,src2,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数。
第四个参数,beta,表示第二个数组的权重值。
第六个参数,dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数。
第五个参数,gamma,一个加到权重总和上的标量值。看下面的式子自然会理解。
第七个参数,dtype,输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。

dst = src1[I]*alpha+ src2[I]*beta + gamma;

猜你喜欢

转载自blog.csdn.net/zhikaixuan/article/details/84142087