我的OPENCV学习笔记-图像混合
来源:互联网 发布:温州网络学堂挂机 编辑:程序博客网 时间:2024/05/16 02:34
混合原理:线性混合
g(x)=(1-a)Ima1+aIma2
根据http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/adding_images/adding_images.html#adding-images 中对该原理的解释:
(
以下解释基于Richard Szeliski所著 Computer Vision: Algorithms and Applications
)通过在范围 内改变 ,这个操可以用来对两幅图像或两段视频产生时间上的画面叠化 (cross-dissolve)效果,就像在幻灯片放映和电影制作中那样(很酷吧?)(译者注:在幻灯片翻页时可以设置为前后页缓慢过渡以产生叠加效果,电影中经常在情节过渡时出现画面叠加效果)。
代码如下:
修改自http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/adding_images/adding_images.html#adding-images中代码
#include "stdafx.h"#include <opencv2/imgcodecs.hpp>#include <opencv2/imgproc.hpp>#include <opencv2/videoio.hpp>#include <opencv2/highgui.hpp>#include <string.h>#include <iostream>using namespace cv;using namespace std;/*int main() {Mat img = imread("d:\\1.jpg");namedWindow("aa");imshow("aa", img);waitKey(6000);}*/int main(int argc, char** argv){double alpha = 0.5; double beta; double input;Mat src1, src2, dst;/// Ask the user enter alphastd::cout << " Simple Linear Blender " << std::endl;std::cout << "-----------------------" << std::endl;std::cout << "* Enter alpha [0-1]: ";std::cin >> input;/// We use the alpha provided by the user iff it is between 0 and 1if (alpha >= 0 && alpha <= 1){alpha = input;}/// Read image ( same size, same type )src1 = imread("D:\\IMG_1.JPG");src2 = imread("D:\\IMG_2.JPG");if (!src1.data) { printf("Error loading src1 \n"); return -1; }if (!src2.data) { printf("Error loading src2 \n"); return -1; }/// Create WindowsnamedWindow("Linear Blend", 1);beta = ( alpha);addWeighted(src1, alpha, src2, beta, 0.0, dst);imshow("Linear Blend", dst);waitKey(0);return 0;}个人理解:
我试图将(1-a)在代码中变换为a,尝试一下如果当a为1,即g(x)=Ima1+Ima2的情景
下面是两张原图:
(取自在我高中的照片)
我们可以看到,第一张图片很像是将对比度放大后与第二张的混合。
如果我根据Opencv网站源码的要求进行编译,则会出现下面的效果:
beta = (1.0- alpha);这样就很符合所谓的动态的渐变效果。
但如果将1.0改为0.8或者更小怎么样(我却是没有很明白它这些参数对图片的修改到底是怎么样的,只能如此尝试)
beta = (0.7- alpha);我们发现IMG_2暗淡了一些。
所以问题就来了,addWeighted函数将两个图像混合
cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst );
那么alpha,beta决定的是比例(0<=x<=1),那么它对应的修改Mat如何做到的?这种彩色图像应该是三通道RGB的,也就是说,如果将RGB三个参数缩放同比例值会有相应的效果?
该问题存疑。
我们看到,有一个参数double gamma,根据资料查找,我知道这是微调,但并没有人说明这个参数对整体的影响,接下来我来实验一下。
addWeighted(src1, alpha, src2, beta, 0.5, dst);
令我费解的是,这一张与上上一张并没有感觉有太大的差距。难道是我的值太小了?
addWeighted(src1, alpha, src2, beta, 5, dst);遗憾的是,我仍然没有看出来有什么不同,不过一些细节的对比,发现这并不是位移上的微调,可能是颜色上的吧。。。存疑。
存疑内容:
1.alpha等参数在addWeighted函数中作用是调节比例,那在Mat中是如何运作的?
2.在addWeighted中的参数 double gamma据说是用来微调的,但它到底是调节什么的?
求各路大神告知,小弟拜谢
- 我的OPENCV学习笔记-图像混合
- opencv学习笔记-3,图像混合
- OpenCV--图像的混合
- 【OpenCV学习笔记】2.1图像混合和叠加
- OpenCV学习笔记(03) :图像ROI以及线性混合
- opencv学习笔记ROI区域和图像混合叠加
- OpenCV Python 学习笔记(四) 图像混合
- OpenCV学习笔记(07):图像通道的分离和混合
- OpenCV学习——图像通道的GRB分割混合
- 我的OpenCV学习笔记(22):如何区别一幅图像是否是黑白图像
- OpenCV学习笔记(四):ROI区域图像叠加和图像线性混合
- OpenCV学习笔记(二)ROI区域图像叠加&初级图像混合
- OpenCV学习笔记(7)ROI区域图像叠加&初级图像混合 全剖析
- opencv学习笔记10 使用OpenCV对两幅图像求和(求混合(blending))¶
- 我的opencv学习笔记
- OpenCV学习第六篇:图像混合
- 我的OpenCV学习笔记(25):c++版本的高斯混合模型的源代码完全注释
- 我的OpenCV学习笔记(14):用直方图对比完成基于内容的图像检索
- 第三周项目一(3)
- 计算机的硬件软件组成
- #CCF准备一年日常刷题#201509-1 数列分段
- Hibernate的索引
- 南阳oj 123 树状数组入门 区间更新 单点求值
- 我的OPENCV学习笔记-图像混合
- 基于CUDA在GPU上实现膨胀、腐蚀加速
- 关于201709CSP的总结
- poj1789 Truck History
- ElastAlert对ELK日志进行邮箱报警
- hibernate 初步
- Uva 1347 旅行
- Vue项目 build构建
- 面试题