图像处理算法系列 第五章 图像合成
来源:互联网 发布:产品网络推销话术 编辑:程序博客网 时间:2024/05/03 23:59
这篇文章将讲述图片合成的例子。
如何将两个图片合成一张图片呢?
这个问题看起来很深奥,包括ps上面其实用的最多的东西也属于图片合成技术。
但是线性的图片合成其实很简单。
一原理:
两个图片的融合,首先两个图片大小必须一致,如果不一致怎么办,要使用ROI区域,找到大图片中要和小图片进行融合的尺寸。
两个图片的像素值,按照给定的比例进行叠加,就可以将两个图片融合起来。
二算法:
算法很简单,通过原理可以很简单的看到算法的实现,这里不罗嗦了,想了解更多的请看:
http://docs.opencv.org/doc/tutorials/core/adding_images/adding_images.html?highlight=blend
三 代码
void blendTwoImage(Mat src1,float alpa, Mat src2, float beta, float gama, Mat &dst){dst.create(src1.size(),src1.type());uchar *psrc1;uchar *psrc2; uchar *pdst;int channels = src1.channels();std::cout<<src1.rows<<" "<<src1.cols<<std::endl;for (int i = 0; i<src1.rows; i++){psrc1 = src1.ptr<uchar>(i);psrc2 = src2.ptr<uchar>(i);pdst = dst.ptr<uchar>(i);for (int j =0; j <src1.cols; j++){int B;int G;int R;B = psrc1[j*channels] *alpa + psrc2[j*channels] *beta + gama;G = psrc1[j*channels + 1] *alpa + psrc2[j*channels + 1] *beta + gama;R = psrc1[j*channels + 2] *alpa + psrc2[j*channels + 2] *beta + gama;if (B>255)B = 255;if (G>255)G = 255;if (R>255)R = 255;pdst[j*channels] = B;pdst[j*channels + 1] = G;pdst[j*channels + 2] = R;//std::cout<<i<<" " <<j<<std::endl;}}}
四效果图
原始本文
- 图像处理算法系列 第五章 图像合成
- Delphi图像处理 -- 图像合成
- C++图像处理 -- 图像合成
- 图像处理算法系列 第二章 二值化
- 图像处理算法系列 第四章 直方图
- opencv2-第五章-图像处理
- 图像处理算法系列 第三章 图像模糊处理 (平滑处理)
- 图像处理算法系列 第一章 灰度图
- 【Matlab数字图像处理】第五章:图像复原
- opencv2-第五章-图像处理2
- 图像合成
- 图像处理算法系列 第六章 图像形态变化 膨胀 腐蚀 开运算 闭运算
- C#图像处理(剪切、合成、缩略)
- C#图像处理(剪切、合成、缩略)
- C#图像处理(剪切、合成、缩略)
- 图像处理系列导航
- 第五章 图像数据压缩
- 【图像处理】图像处理的神奇算法
- 查看参数是否需要重启数据库生效
- mysql 细微点汇总select group_concat(b) as b_str from table
- SQL 查询例子
- c/c++基础零散补充
- 内联函数与宏定义的区别
- 图像处理算法系列 第五章 图像合成
- UVA 10061 How many zero's and how many digits ?
- 32位操作系统和64位操作系统有什么区别
- MYSQL客户端into outputfile中文乱码问题
- 程序员技术练级攻略
- Filter
- 解决js在火狐浏览器中的读取xml属性错误
- Tomcat的基本配置
- shouldChangeCharactersInRange