我是靠谱客的博主 危机樱桃,最近开发中收集的这篇文章主要介绍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 中提供了一个函数:

   

 

代码部分:

// 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课图像的合并所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部