内容简介:拿到校招offer后,离毕业还有近一年的时间。趁这段时间就好好复习巩固一下opencv及图像处理的知识,网上不少opencv教程,浅显易懂的有毛星云大大的《学习OpenCV3》。比较系统的有经典的国外教材《Learning OpenCV》。但是其实我们都忽略还有一个重要同时非常好的学习资源,就是官方自带的samples,我觉得好好阅读学习一边这些例子是很有帮助的。cpp的例子数量还是可观的,相信对于人一个没有基础的学习完,进步也是很大的。
拿到校招offer后,离毕业还有近一年的时间。趁这段时间就好好复习巩固一下opencv及图像处理的知识,网上不少opencv教程,浅显易懂的有毛星云大大的《学习OpenCV3》。比较系统的有经典的国外教材《Learning OpenCV》。但是其实我们都忽略还有一个重要同时非常好的学习资源,就是官方自带的samples,我觉得好好阅读学习一边这些例子是很有帮助的。
自带例子在解压包中
自带例子非常丰富,包含多方面的。热门的Android,c++和 java 都有。笔者主用c++,目前先学习cpp部分。
cpp的例子数量还是可观的,相信对于人一个没有基础的学习完,进步也是很大的。
好了废话不多说,先上第一个demo。图像混合的的例子先直接上代码。
//两张图片的混合公式 //dst = alpha*src1 + beta*src2 //dst = alpha*src1 + beta*src2 + gamma(可选) //包含所需的头文件 #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui.hpp" #include <iostream> using namespace cv; //不建议使用 using namespace std;避免引起命名空间污染。同样的不建议使用 using namespace cv, 应当使用cv::的形式 using std::cin; using std::cout; using std::endl; int main( void ) { //定义和初始化alpha、beta double alpha = 0.5; double beta; double input; //定义所需图像mat容器 Mat src1, src2, dst; //提示用户输入alpha的值 cout << " Simple Linear Blender " << endl; cout << "-----------------------" << endl; cout << "* Enter alpha [0.0-1.0]: "; cin >> input; // 输入的alpha的值必须在[0, 1]区间,否则使用默认值 if( input >= 0 && input <= 1 ) { alpha = input; } //加载需要混合的两张图片,要求两张图片必须大小和类型一致 src1 = imread( "../data/LinuxLogo.jpg" ); src2 = imread( "../data/WindowsLogo.jpg" ); //检查两张图片是否加载成功 if( src1.empty() ) { cout << "Error loading src1" << endl; return -1; } if( src2.empty() ) { cout << "Error loading src2" << endl; return -1; } beta = ( 1.0 - alpha );//计算beta, beta和alpha相加为1 addWeighted( src1, alpha, src2, beta, 0.0, dst);//图片混合 imshow( "Linear Blend", dst );//显示混合后的图片 waitKey(0);//等待按下任意键结束 return 0; }
小结
整个程序还是比较简单,把流程总结一大概是这样的。
- 定义和初始化所需要的变量和图像容器。
- 提示用户输入变量值
- 检查用户输入变量值
- 加载两张相同大小和类型的图片
- 检查图片是否加载成功
- 调用addWeighted函数执行混合操作
- 显示混合结果
整个程序其实重点就是围绕图像混合公式
dst = alpha*src1 + beta*src2 dst = alpha*src1 + beta*src2 + gamma(可选)
来实现。而addWeighted函数就是混合公式的代码实现。那么来看一下混合公式,
其实就是一个线性混合
dst = alpha*src1 + (1 - alpha)*src2 + gamma//gamma可选
即对每一个像素点执行上诉公式的操作。
然后看一下addWeighted函数原型
void cv::addWeighted ( InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1 )
附上参数的解释
以上所述就是小编给大家介绍的《opencv自带例子学习-图像混合》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- laravel自带用户认证
- Mac自带apache配置
- Golang中自带的强大命令工具
- Android调用系统自带的分享功能
- 使用oracle自带的命令进行导入导出
- opencv自带例子学习-文件输入与输出
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
实战移动互联网营销
江礼坤 / 机械工业出版社 / 2016-1 / 79.00
移动互联网的兴起,又为企业带来了新的挑战与机遇!越来越多的人,看到了移动互联网的价值与前景,但是在具体操作时,移动互联网具体如何玩?企业如何向移动互联网转型?如何通过移动互联网做营销?等等一系列问题,接踵而至。虽然目前相关的资料和文章很多,但是都过于零散,让人看完后,还是无从下手。而本书旨在成为移动互联网营销领域标准的工具书、参考书,为大家呈现一个系统、全面的移动互联网营销体系。让大家从思维模式到......一起来看看 《实战移动互联网营销》 这本书的介绍吧!