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
- opencv实现图片HDR功能
- opencv实现图片HDR功能
- opencv HDR(COPY)
- learn opencv-HDR成像
- HDR功能预研
- hdr例证&walle图片
- python+opencv实现简单的图片搜索功能
- HDR技术以及如何实现HDR效果
- HDR技术以及如何实现HDR效果
- GLSL实现HDR Rendering
- GLSL实现HDR Rendering
- GLSL实现HDR Rendering
- GLSL实现HDR Rendering
- opencv实现拼图功能
- OpenCV 打印图片对话框功能
- OpenCV实现图片锐化
- HDR
- HDR
- 做一个合格的程序猿之浅析Spring AOP源码(十三) jdk的动态代理和cglib的代理
- 顺序表的基本运算
- 7080生化分析仪使用说明书—— 测定原理篇
- 排序算法——快速排序
- android随机生成验证码
- opencv实现图片HDR功能
- HDOJ 2092 整数解(2次方程整数解公式)
- iOS 强弱引用
- 抛出异常与栈展开(stack unwinding)
- view.layer.shouldRasterize = YES(光栅化)的使用 及图片性能整理
- mysql数据库安装的时候可能出现的问题及解决办法
- 等额本金
- 字符串类——NSString/NSMutableString
- 关于AndroidStudio运行项目时出现 Could not create plugin of type 'AppPlugin'.