我是靠谱客的博主 危机樱桃,这篇文章主要介绍opencv第5课图像的合并,现在分享给大家,希望可以做个参考。

   今天我们来记录下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 中提供了一个函数:

   

 

代码部分:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// 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 ]的范围,看看图片是什么效果。

复制代码
1
2
3
4
Mat stt; stt = src1 * 0.3; namedWindow("new pic", CV_WINDOW_AUTOSIZE); imshow("new pic", stt);

 

小伙伴们,现在是不是更好理解图片的基本操做了,哈哈哈,喜欢本文章的记得点个赞,大家一起来快乐的学习。 

 

 

 

 

最后

以上就是危机樱桃最近收集整理的关于opencv第5课图像的合并的全部内容,更多相关opencv第5课图像内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(100)

评论列表共有 0 条评论

立即
投稿
返回
顶部