opencv实现图片HDR功能

简介  本篇主要是利用三张图片:过曝(相机设置exposure+1)、正常(相机设置exposure+0)、欠曝(相机设置exposure-1),来合成一张在亮出和暗处细节都清晰的图片,来简易实现图片的HDR功能。具体实现实现代码

using namespace cv;normalpicNamelowpicNameMat mat1normalWidth, normalHeight;int lowWidth, lowHeight;IplImage src1i, j;CvScalar s1, s2, s3;src1 = pic1;src2 = pic2;src3 = pic3;dst_src = dst_mat;tmp_src = tmp_mat;cvCvtColortmp_srciijjs1 s2 s3 weight s2.s3.s1.weights3.weights3.s1.weights3.weights3.s1.weights3.weightcvSet2Dargvargc "highpicNameargvnormalpicNameargvlowpicNameargvmat1 mat2 mat3 highWidth = mat1.rows;highHeight = mat1.cols;normalWidth = mat2.rows;normalHeight = mat2.cols;lowWidth = mat3.rows;lowHeight = mat3.cols;dst_mat tmp_mat hdrCale(mat1, mat2, mat3);imshowmat2);imshowdst_mat);imwritedst_mat);cv

代码讲解  1、首先进行相对应的初始化操作:运行软件时候,需要传入三张图片,顺序上分别是:过曝、正常、欠曝。打开这三张图片,保存在mat1、mat2、mat3中,注意这三张图片必须大小一致。接着获取到图片的width和height。最后创建两张空白图片:tmp_mat和dst_mat。

"highpicNameargvnormalpicNameargvlowpicNameargvmat1 mat2 mat3 highWidth = mat1.rows;highHeight = mat1.cols;normalWidth = mat2.rows;normalHeight = mat2.cols;lowWidth = mat3.rows;lowHeight = mat3.cols;dst_mat tmp_mat

  2、接着进入到HDR的算法处理:对应的处理很简单,主要就是根据就是权重,把过曝和欠曝图片合成到dst_mat中。具体做法:循环依次打开三张图片的同一位置像素,用正常曝光图片像素,利用公式:weight = 0.5 + (127 – s2.val[0]) * 0.002;来获得使用过曝、欠曝像素合成到dst_mat中对应使用的权值。接着:s3.val[0] = (s1.val[0] * weight) + (s3.val[0] * (1-weight));计算出合成像素值之后,,写入到dst_mat对应的坐标位置。进而生成HDR照片。

i, j;CvScalar s1, s2, s3;src1 = pic1;src2 = pic2;src3 = pic3;dst_src = dst_mat;tmp_src = tmp_mat;cvCvtColortmp_srciijjs1 s2 s3 weight s2.s3.s1.weights3.weights3.s1.weights3.weights3.s1.weights3.weightcvSet2D

  3、最后将正常照片和HDR照片显示初恋,并将hdr照片保存下来。

imshowmat2);imshowdst_mat);imwritedst_mat);cv

效果演示 对应的效果演示如下:过曝图像:

正常图像

欠曝图像:

HDR图像

生命不在长而在于好,只要每一次尽力的演示,都值得鼓励与喝采。

opencv实现图片HDR功能

相关文章:

你感兴趣的文章:

标签云: