通过一些小例子,来学习下OpenCv的基本知识。
由于OpenCv的c++类和函数都是定义在命名空间cv中的,因此在使用OpenCv的一些类和函数的时候要加上cv::命名空间,还可以选择在程序中OpenCv函数的调用之前使用:
using namespace cv; 来确定命名空间,为了后面程序中OpenCv函数的调用方便。
Mat类:是保存图像以及其他矩阵数据的数据结构,默认大小为0,OpenCv2.0以后,实现图片的载入和显示变得更加便捷。需要使用imread()和imshow()。
看例子学应用:
Mat image1 = imread("imagePath",0);//载入灰度图像
Mat image1 = imread("imagePath",> 0 );//载入3通道的彩色图像
Mat image1 = imread("imagePath",2|4);//载入无损源图像
imshow()函数:原型:inshow(const string& winname, InputArray mat);
第一个参数为:需要显示的窗口标识名;第二个参数为:需要显示的图像类型为Mat。
创建窗口的函数:namedWindow(const string& winname, int flags = WINDOW_AUTOSIZE);
第二个参数的值分为: WINDOW_NORMAL : 无限制。
WINDOW_AUTOSIZE :自适应。
WINDOW_OPENGL:支持openGL。
在opencv2.0中可以 在上面属性的前面加CV_
namedWindow()函数的用途就是创建一个可以存放图片和进度条的容器窗口。
imwrite()函数:输出图像到文件。
imwrite(const string& filename, InputArray img, const vertor
第一个参数:需要写入的文件名,注意要带上后缀。
第二个参数:Mat类型的图像数据。
第三个参数:表示特定格式保存的参数编码,若填写按下面要求。
对于JPEG格式 参数[0 100] -表示图片质量,默认值值是95.
对于PNG格式 参数[0 9] -表示压缩级别 默认为3。
对于PPM,PGM,PBM - 表示一个二进制格式的标志,取值为0或1,默认为1.
图像的混合:addweighted();函数
图像处理中一个简单而有趣的点运算操作可以用以下的公式表示,可以实现两张图片的线性融合。
g(x) = (1-α)f0(x) + αf1(x)
这里α 表示两种图片的融合比例,这个g(x) 表示 融合图片中的像素点,f0(x) 和 f1(x) 分别表示背景和前景图片中的像素点。
下面为例程中的函数调用,
beta = ( 1.0 - alpha );
addWeighted( src1, alpha, src2, beta, 0.0, dst);
opencv 通过 addWeighted 函数实现图片的线性融合,这个函数在之前的例程中也有提到过。
这个函数的原型如下所示,可以看出这个函数最小需要6个参数。
1、 第1个参数,输入图片1,
2、第2个参数,图片1的融合比例
3、第3个参数,输入图片2
4、第4个参数,图片2的融合比例
5、第5个参数,偏差
6、第6个参数,输出图片