opencv自带例子学习-图像混合

栏目: 编程工具 · 发布时间: 5年前

内容简介:拿到校招offer后,离毕业还有近一年的时间。趁这段时间就好好复习巩固一下opencv及图像处理的知识,网上不少opencv教程,浅显易懂的有毛星云大大的《学习OpenCV3》。比较系统的有经典的国外教材《Learning OpenCV》。但是其实我们都忽略还有一个重要同时非常好的学习资源,就是官方自带的samples,我觉得好好阅读学习一边这些例子是很有帮助的。cpp的例子数量还是可观的,相信对于人一个没有基础的学习完,进步也是很大的。

拿到校招offer后,离毕业还有近一年的时间。趁这段时间就好好复习巩固一下opencv及图像处理的知识,网上不少opencv教程,浅显易懂的有毛星云大大的《学习OpenCV3》。比较系统的有经典的国外教材《Learning OpenCV》。但是其实我们都忽略还有一个重要同时非常好的学习资源,就是官方自带的samples,我觉得好好阅读学习一边这些例子是很有帮助的。

自带例子在解压包中

opencv自带例子学习-图像混合

opencv自带例子学习-图像混合 opencv自带例子学习-图像混合

自带例子非常丰富,包含多方面的。热门的Android,c++和 java 都有。笔者主用c++,目前先学习cpp部分。

opencv自带例子学习-图像混合 opencv自带例子学习-图像混合

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自带例子学习-图像混合


以上所述就是小编给大家介绍的《opencv自带例子学习-图像混合》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Release It!

Release It!

Michael T. Nygard / Pragmatic Bookshelf / 2007-03-30 / USD 34.95

“Feature complete” is not the same as “production ready.” Whether it’s in Java, .NET, or Ruby on Rails, getting your application ready to ship is only half the battle. Did you design your system to......一起来看看 《Release It!》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器