opencv实现图片HDR功能

来源:互联网 发布:詹姆斯个人数据统计 编辑:程序博客网 时间:2024/05/19 15:21

from: http://blog.csdn.net/u011630458/article/details/46592013

简介

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

具体实现

实现代码

<span class="co2" style="color: rgb(51, 153, 51);">#include <opencv2/core/core.hpp>                                                                                                     </span><span class="co2" style="color: rgb(51, 153, 51);">#include <opencv2/highgui/highgui.hpp></span><span class="co2" style="color: rgb(51, 153, 51);">#include <math.h></span><span class="co2" style="color: rgb(51, 153, 51);">#include <string.h></span><span class="co2" style="color: rgb(51, 153, 51);">#include <opencv/cv.h></span><span class="co2" style="color: rgb(51, 153, 51);">#include <stdio.h></span><span class="co2" style="color: rgb(51, 153, 51);">#include "opencv2/photo/photo.hpp"</span> using namespace cv<span class="sy0" style="color: rgb(51, 153, 51);">;</span> <span class="kw4" style="color: rgb(153, 51, 51);">char</span> highpicName<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">20</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw4" style="color: rgb(153, 51, 51);">char</span> normalpicName<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">20</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw4" style="color: rgb(153, 51, 51);">char</span> lowpicName<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">20</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>Mat mat1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> mat2<span class="sy0" style="color: rgb(51, 153, 51);">,</span> mat3<span class="sy0" style="color: rgb(51, 153, 51);">,</span> dst_mat<span class="sy0" style="color: rgb(51, 153, 51);">,</span> tmp_mat<span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> highWidth<span class="sy0" style="color: rgb(51, 153, 51);">,</span> highHeight<span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> normalWidth<span class="sy0" style="color: rgb(51, 153, 51);">,</span> normalHeight<span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> lowWidth<span class="sy0" style="color: rgb(51, 153, 51);">,</span> lowHeight<span class="sy0" style="color: rgb(51, 153, 51);">;</span>IplImage src1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> src2<span class="sy0" style="color: rgb(51, 153, 51);">,</span> src3<span class="sy0" style="color: rgb(51, 153, 51);">,</span> dst_src<span class="sy0" style="color: rgb(51, 153, 51);">,</span> tmp_src<span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw4" style="color: rgb(153, 51, 51);">double</span> weight<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="nu16" style="color: rgb(128, 0, 128);">0.5</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>  <span class="kw4" style="color: rgb(153, 51, 51);">void</span> hdrCale<span class="br0" style="color: rgb(0, 153, 0);">(</span>Mat pic1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> Mat pic2<span class="sy0" style="color: rgb(51, 153, 51);">,</span> Mat pic3<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> j<span class="sy0" style="color: rgb(51, 153, 51);">;</span>CvScalar s1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> s2<span class="sy0" style="color: rgb(51, 153, 51);">,</span> s3<span class="sy0" style="color: rgb(51, 153, 51);">;</span>  src1 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> pic1<span class="sy0" style="color: rgb(51, 153, 51);">;</span>src2 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> pic2<span class="sy0" style="color: rgb(51, 153, 51);">;</span>src3 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> pic3<span class="sy0" style="color: rgb(51, 153, 51);">;</span>dst_src <span class="sy0" style="color: rgb(51, 153, 51);">=</span> dst_mat<span class="sy0" style="color: rgb(51, 153, 51);">;</span>tmp_src <span class="sy0" style="color: rgb(51, 153, 51);">=</span> tmp_mat<span class="sy0" style="color: rgb(51, 153, 51);">;</span> cvCvtColor<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">&</span>src2<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="sy0" style="color: rgb(51, 153, 51);">&</span>tmp_src<span class="sy0" style="color: rgb(51, 153, 51);">,</span> CV_BGR2GRAY<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw1" style="color: rgb(177, 177, 0);">for</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>i<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> i<span class="sy0" style="color: rgb(51, 153, 51);"><</span> normalWidth<span class="sy0" style="color: rgb(51, 153, 51);">;</span> i<span class="sy0" style="color: rgb(51, 153, 51);">++</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span><span class="kw1" style="color: rgb(177, 177, 0);">for</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>j<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> j<span class="sy0" style="color: rgb(51, 153, 51);"><</span>normalHeight<span class="sy0" style="color: rgb(51, 153, 51);">;</span> j<span class="sy0" style="color: rgb(51, 153, 51);">++</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>s1 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> cvGet2D<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">&</span>src1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> j<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>s2 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> cvGet2D<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">&</span>tmp_src<span class="sy0" style="color: rgb(51, 153, 51);">,</span> i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> j<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>s3 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> cvGet2D<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">&</span>src3<span class="sy0" style="color: rgb(51, 153, 51);">,</span> i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> j<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>weight <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu16" style="color: rgb(128, 0, 128);">0.5</span> <span class="sy0" style="color: rgb(51, 153, 51);">+</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">127</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> s2.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> <span class="nu16" style="color: rgb(128, 0, 128);">0.002</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s1.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> weight<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">+</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">-</span>weight<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s1.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> weight<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">+</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">-</span>weight<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s1.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> weight<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">+</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">-</span>weight<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>cvSet2D<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">&</span>dst_src<span class="sy0" style="color: rgb(51, 153, 51);">,</span> i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> j<span class="sy0" style="color: rgb(51, 153, 51);">,</span> s3<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="br0" style="color: rgb(0, 153, 0);">}</span><span class="br0" style="color: rgb(0, 153, 0);">}</span><span class="br0" style="color: rgb(0, 153, 0);">}</span>  <span class="kw4" style="color: rgb(153, 51, 51);">int</span> main<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> argc<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw4" style="color: rgb(153, 51, 51);">char</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span><span class="kw1" style="color: rgb(177, 177, 0);">if</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>argc <span class="sy0" style="color: rgb(51, 153, 51);"><</span> <span class="nu0" style="color: rgb(0, 0, 221);">4</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span><span class="kw3" style="color: rgb(0, 0, 102);">printf</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"Please input high exposure/normal exposure/low exposure picture!<span class="es1" style="color: rgb(0, 0, 153); font-weight: bold;">\n</span>"</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw1" style="color: rgb(177, 177, 0);">return</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="br0" style="color: rgb(0, 153, 0);">}</span><span class="kw3" style="color: rgb(0, 0, 102);">memcpy</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>highpicName<span class="sy0" style="color: rgb(51, 153, 51);">,</span> argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw4" style="color: rgb(153, 51, 51);">sizeof</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw3" style="color: rgb(0, 0, 102);">memcpy</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>normalpicName<span class="sy0" style="color: rgb(51, 153, 51);">,</span> argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw4" style="color: rgb(153, 51, 51);">sizeof</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw3" style="color: rgb(0, 0, 102);">memcpy</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>lowpicName<span class="sy0" style="color: rgb(51, 153, 51);">,</span> argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">3</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw4" style="color: rgb(153, 51, 51);">sizeof</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">3</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>mat1 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> imread<span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>mat2 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> imread<span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>mat3 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> imread<span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">3</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>highWidth <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat1.<span class="me1" style="color: rgb(32, 32, 32);">rows</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>highHeight <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat1.<span class="me1" style="color: rgb(32, 32, 32);">cols</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>normalWidth <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat2.<span class="me1" style="color: rgb(32, 32, 32);">rows</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>normalHeight <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat2.<span class="me1" style="color: rgb(32, 32, 32);">cols</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>lowWidth <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat3.<span class="me1" style="color: rgb(32, 32, 32);">rows</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>lowHeight <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat3.<span class="me1" style="color: rgb(32, 32, 32);">cols</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>dst_mat <span class="sy0" style="color: rgb(51, 153, 51);">=</span> Mat<span class="br0" style="color: rgb(0, 153, 0);">(</span>normalWidth<span class="sy0" style="color: rgb(51, 153, 51);">,</span> normalHeight<span class="sy0" style="color: rgb(51, 153, 51);">,</span> CV_8UC3<span class="sy0" style="color: rgb(51, 153, 51);">,</span> cv<span class="sy0" style="color: rgb(51, 153, 51);">::</span><span class="me2" style="color: rgb(32, 32, 32);">Scalar</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>tmp_mat <span class="sy0" style="color: rgb(51, 153, 51);">=</span> Mat<span class="br0" style="color: rgb(0, 153, 0);">(</span>normalWidth<span class="sy0" style="color: rgb(51, 153, 51);">,</span> normalHeight<span class="sy0" style="color: rgb(51, 153, 51);">,</span> CV_8UC1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> cv<span class="sy0" style="color: rgb(51, 153, 51);">::</span><span class="me2" style="color: rgb(32, 32, 32);">Scalar</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> hdrCale<span class="br0" style="color: rgb(0, 153, 0);">(</span>mat1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> mat2<span class="sy0" style="color: rgb(51, 153, 51);">,</span> mat3<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> imshow<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"normal"</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> mat2<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>imshow<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"HDR"</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> dst_mat<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>imwrite<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"HDR.jpg"</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> dst_mat<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>cv<span class="sy0" style="color: rgb(51, 153, 51);">::</span><span class="me2" style="color: rgb(32, 32, 32);">waitKey</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw1" style="color: rgb(177, 177, 0);">return</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="br0" style="color: rgb(0, 153, 0);">}</span>

代码讲解

  1、首先进行相对应的初始化操作:运行软件时候,需要传入三张图片,顺序上分别是:过曝、正常、欠曝。打开这三张图片,保存在mat1、mat2、mat3中,注意这三张图片必须大小一致。接着获取到图片的width和height。最后创建两张空白图片:tmp_mat和dst_mat。
        <span class="kw1" style="color: rgb(177, 177, 0);">if</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>argc <span class="sy0" style="color: rgb(51, 153, 51);"><</span> <span class="nu0" style="color: rgb(0, 0, 221);">4</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span><span class="kw3" style="color: rgb(0, 0, 102);">printf</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"Please input high exposure/normal exposure/low exposure picture!<span class="es1" style="color: rgb(0, 0, 153); font-weight: bold;">\n</span>"</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw1" style="color: rgb(177, 177, 0);">return</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="br0" style="color: rgb(0, 153, 0);">}</span><span class="kw3" style="color: rgb(0, 0, 102);">memcpy</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>highpicName<span class="sy0" style="color: rgb(51, 153, 51);">,</span> argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw4" style="color: rgb(153, 51, 51);">sizeof</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw3" style="color: rgb(0, 0, 102);">memcpy</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>normalpicName<span class="sy0" style="color: rgb(51, 153, 51);">,</span> argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw4" style="color: rgb(153, 51, 51);">sizeof</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw3" style="color: rgb(0, 0, 102);">memcpy</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>lowpicName<span class="sy0" style="color: rgb(51, 153, 51);">,</span> argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">3</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="kw4" style="color: rgb(153, 51, 51);">sizeof</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">3</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>mat1 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> imread<span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>mat2 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> imread<span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>mat3 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> imread<span class="br0" style="color: rgb(0, 153, 0);">(</span>argv<span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">3</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>highWidth <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat1.<span class="me1" style="color: rgb(32, 32, 32);">rows</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>highHeight <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat1.<span class="me1" style="color: rgb(32, 32, 32);">cols</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>normalWidth <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat2.<span class="me1" style="color: rgb(32, 32, 32);">rows</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>normalHeight <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat2.<span class="me1" style="color: rgb(32, 32, 32);">cols</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>lowWidth <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat3.<span class="me1" style="color: rgb(32, 32, 32);">rows</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>lowHeight <span class="sy0" style="color: rgb(51, 153, 51);">=</span> mat3.<span class="me1" style="color: rgb(32, 32, 32);">cols</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>dst_mat <span class="sy0" style="color: rgb(51, 153, 51);">=</span> Mat<span class="br0" style="color: rgb(0, 153, 0);">(</span>normalWidth<span class="sy0" style="color: rgb(51, 153, 51);">,</span> normalHeight<span class="sy0" style="color: rgb(51, 153, 51);">,</span> CV_8UC3<span class="sy0" style="color: rgb(51, 153, 51);">,</span> cv<span class="sy0" style="color: rgb(51, 153, 51);">::</span><span class="me2" style="color: rgb(32, 32, 32);">Scalar</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>tmp_mat <span class="sy0" style="color: rgb(51, 153, 51);">=</span> Mat<span class="br0" style="color: rgb(0, 153, 0);">(</span>normalWidth<span class="sy0" style="color: rgb(51, 153, 51);">,</span> normalHeight<span class="sy0" style="color: rgb(51, 153, 51);">,</span> CV_8UC1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> cv<span class="sy0" style="color: rgb(51, 153, 51);">::</span><span class="me2" style="color: rgb(32, 32, 32);">Scalar</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>
  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照片。
<span class="kw4" style="color: rgb(153, 51, 51);">void</span> hdrCale<span class="br0" style="color: rgb(0, 153, 0);">(</span>Mat pic1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> Mat pic2<span class="sy0" style="color: rgb(51, 153, 51);">,</span> Mat pic3<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span><span class="kw4" style="color: rgb(153, 51, 51);">int</span> i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> j<span class="sy0" style="color: rgb(51, 153, 51);">;</span>CvScalar s1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> s2<span class="sy0" style="color: rgb(51, 153, 51);">,</span> s3<span class="sy0" style="color: rgb(51, 153, 51);">;</span> src1 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> pic1<span class="sy0" style="color: rgb(51, 153, 51);">;</span>src2 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> pic2<span class="sy0" style="color: rgb(51, 153, 51);">;</span>src3 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> pic3<span class="sy0" style="color: rgb(51, 153, 51);">;</span>dst_src <span class="sy0" style="color: rgb(51, 153, 51);">=</span> dst_mat<span class="sy0" style="color: rgb(51, 153, 51);">;</span>tmp_src <span class="sy0" style="color: rgb(51, 153, 51);">=</span> tmp_mat<span class="sy0" style="color: rgb(51, 153, 51);">;</span> cvCvtColor<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">&</span>src2<span class="sy0" style="color: rgb(51, 153, 51);">,</span> <span class="sy0" style="color: rgb(51, 153, 51);">&</span>tmp_src<span class="sy0" style="color: rgb(51, 153, 51);">,</span> CV_BGR2GRAY<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="kw1" style="color: rgb(177, 177, 0);">for</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>i<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> i<span class="sy0" style="color: rgb(51, 153, 51);"><</span> normalWidth<span class="sy0" style="color: rgb(51, 153, 51);">;</span> i<span class="sy0" style="color: rgb(51, 153, 51);">++</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span><span class="kw1" style="color: rgb(177, 177, 0);">for</span><span class="br0" style="color: rgb(0, 153, 0);">(</span>j<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span> j<span class="sy0" style="color: rgb(51, 153, 51);"><</span>normalHeight<span class="sy0" style="color: rgb(51, 153, 51);">;</span> j<span class="sy0" style="color: rgb(51, 153, 51);">++</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">{</span>s1 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> cvGet2D<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">&</span>src1<span class="sy0" style="color: rgb(51, 153, 51);">,</span> i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> j<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>s2 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> cvGet2D<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">&</span>tmp_src<span class="sy0" style="color: rgb(51, 153, 51);">,</span> i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> j<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>s3 <span class="sy0" style="color: rgb(51, 153, 51);">=</span> cvGet2D<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">&</span>src3<span class="sy0" style="color: rgb(51, 153, 51);">,</span> i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> j<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>weight <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="nu16" style="color: rgb(128, 0, 128);">0.5</span> <span class="sy0" style="color: rgb(51, 153, 51);">+</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">127</span> <span class="sy0" style="color: rgb(51, 153, 51);">-</span> s2.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">]</span><span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> <span class="nu16" style="color: rgb(128, 0, 128);">0.002</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s1.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> weight<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">+</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">-</span>weight<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s1.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> weight<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">+</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">-</span>weight<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">=</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s1.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> weight<span class="br0" style="color: rgb(0, 153, 0);">)</span> <span class="sy0" style="color: rgb(51, 153, 51);">+</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span>s3.<span class="me1" style="color: rgb(32, 32, 32);">val</span><span class="br0" style="color: rgb(0, 153, 0);">[</span><span class="nu0" style="color: rgb(0, 0, 221);">2</span><span class="br0" style="color: rgb(0, 153, 0);">]</span> <span class="sy0" style="color: rgb(51, 153, 51);">*</span> <span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">1</span><span class="sy0" style="color: rgb(51, 153, 51);">-</span>weight<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>cvSet2D<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="sy0" style="color: rgb(51, 153, 51);">&</span>dst_src<span class="sy0" style="color: rgb(51, 153, 51);">,</span> i<span class="sy0" style="color: rgb(51, 153, 51);">,</span> j<span class="sy0" style="color: rgb(51, 153, 51);">,</span> s3<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span><span class="br0" style="color: rgb(0, 153, 0);">}</span><span class="br0" style="color: rgb(0, 153, 0);">}</span><span class="br0" style="color: rgb(0, 153, 0);">}</span>
  3、最后将正常照片和HDR照片显示初恋,并将hdr照片保存下来。
        imshow<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"normal"</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> mat2<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>imshow<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"HDR"</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> dst_mat<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>imwrite<span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="st0" style="color: rgb(255, 0, 0);">"HDR.jpg"</span><span class="sy0" style="color: rgb(51, 153, 51);">,</span> dst_mat<span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>cv<span class="sy0" style="color: rgb(51, 153, 51);">::</span><span class="me2" style="color: rgb(32, 32, 32);">waitKey</span><span class="br0" style="color: rgb(0, 153, 0);">(</span><span class="nu0" style="color: rgb(0, 0, 221);">0</span><span class="br0" style="color: rgb(0, 153, 0);">)</span><span class="sy0" style="color: rgb(51, 153, 51);">;</span>

效果演示

 对应的效果演示如下:    过曝图像:            正常图像            欠曝图像:            HDR图像        
0 0
原创粉丝点击