概述
今天我们来记录下opencv的图像的混合效果,也是更加理解图片如何处理的。
目录
图片资源准备:
图片混合的原理:
代码部分:
结果图:
图片资源准备:
首先我们先准备了两张图片:
图片混合的原理:
我们知道图片存储的是矩阵,你可以理解成编程中的二维数组,比如上面的图片是RGB图片,R 为红,G为绿,B为蓝
每个 R 、G、 B 都是 uchar类型,数据量都是为0~255,在图片中位置是 数据 是 B G R的存储顺序。懂数据存储都能明白
这个原理,这里不再细讲了。RGB三个uchar组合成了一个图片的一个像素。注意:这里是RGB图片,还有黑白,等其它图
片存储的是不同的,有兴趣的同学们可以查阅相关资料
先说明一下,这两张图的大小是一样的,因为要 进行矩阵数据的操作! 啥,你说你不会矩阵的操作,去看看线性代数,
或者高等代数,以后别再说学数学没什么用了!
公式:
其中 α 取值 [0,1], 这里是0到1,别学编程时间长了,就认为是0 ,1.(乱棍打死), 给g(x) 为新的矩阵,f0 , f1
分别两个图片的存储的数据量。通过一个线性变化装换成一个新的矩阵。
opencv 中提供了一个函数:
代码部分:
// opencv00005.cpp : 定义控制台应用程序的入口点。
//
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
double alpha = 0.5; //α系数
double beta; // β系数
double input;
//分别存储三个图片矩阵数据,dst存储的是两张图片的混合结果
Mat src1, src2, dst;
cout << " Simple Linear Blender " << endl;
cout << "-----------------------" << endl;
cout << "* Enter alpha [0-1]: ";
cin >> input;
if (input >=0 && input <= 1)
{
alpha = input;
}
src1 = imread("D:/images/3.jpg");
src2 = imread("D:/images/4.jpg");
if (src1.empty()) { cout << "Error loading src1" << endl; return -1; }
if (src2.empty()) { cout << "Error loading src2" << endl; return -1; }
beta = 1 - alpha;
addWeighted(src1, alpha, src2, beta, 0.0, dst); //图片合成的
namedWindow("out put", CV_WINDOW_AUTOSIZE);
imshow("out put", dst);
waitKey(0);
return 0;
}
结果图:
这样就完成了两个图片的合成。
小伙伴们理解了吗,咱们可以让图片矩阵乘上一个系数[0,1 ]的范围,看看图片是什么效果。
Mat stt;
stt = src1 * 0.3;
namedWindow("new pic", CV_WINDOW_AUTOSIZE);
imshow("new pic", stt);
小伙伴们,现在是不是更好理解图片的基本操做了,哈哈哈,喜欢本文章的记得点个赞,大家一起来快乐的学习。
最后
以上就是危机樱桃为你收集整理的opencv第5课图像的合并的全部内容,希望文章能够帮你解决opencv第5课图像的合并所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复