﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-天下-随笔分类-图像处理</title><link>http://www.cppblog.com/aaxron/category/21234.html</link><description>记录修行的印记
</description><language>zh-cn</language><lastBuildDate>Thu, 14 Jul 2016 23:36:54 GMT</lastBuildDate><pubDate>Thu, 14 Jul 2016 23:36:54 GMT</pubDate><ttl>60</ttl><item><title>灰度图像高斯平滑</title><link>http://www.cppblog.com/aaxron/archive/2016/07/13/213932.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 13 Jul 2016 09:25:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/07/13/213932.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213932.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/07/13/213932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213932.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213932.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;">灰度图像高斯平滑<br />
图像平滑用于去除图像中的噪声。高斯平滑，就是将每个像素的灰度值用其领域的加权平均值代替。该算法简单，能够有效去除高斯噪声。<br />
平滑模板：<br />
1&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;1<br />
2&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;2<br />
1&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;1<br />
<br />
<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;高斯平滑<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;1.&nbsp;pImageData&nbsp;图像数据<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;2.&nbsp;nWidth&nbsp;图像宽度<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;3.&nbsp;nHeight&nbsp;图像高度<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;4.&nbsp;nWidthStep&nbsp;图像行大小</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">void</span>&nbsp;SmoothGauss(unsigned&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*pImageData,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nWidth,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nHeight,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nWidthStep)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;j&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*pLine[3]&nbsp;=&nbsp;{&nbsp;NULL,&nbsp;NULL,&nbsp;NULL&nbsp;};<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nTemplate[9]&nbsp;=&nbsp;{&nbsp;1,&nbsp;2,&nbsp;1,&nbsp;2,&nbsp;4,&nbsp;2,&nbsp;1,&nbsp;2,&nbsp;1&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;&nbsp;nHeight&nbsp;-&nbsp;1;&nbsp;j++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[0]&nbsp;=&nbsp;pImageData&nbsp;+&nbsp;nWidthStep&nbsp;*&nbsp;(j&nbsp;-&nbsp;1);&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">上1行地址</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[1]&nbsp;=&nbsp;pImageData&nbsp;+&nbsp;nWidthStep&nbsp;*&nbsp;j;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">当前行地址</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[2]&nbsp;=&nbsp;pImageData&nbsp;+&nbsp;nWidthStep&nbsp;*&nbsp;(j&nbsp;+&nbsp;1);&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">下1行地址</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nValue&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;nWidth&nbsp;-&nbsp;1;&nbsp;i++)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nValue&nbsp;=&nbsp;(pLine[0][i-1]&nbsp;*&nbsp;nTemplate[0]&nbsp;+&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[0][i]&nbsp;*&nbsp;nTemplate[1]&nbsp;+&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[0][i+1]&nbsp;*&nbsp;nTemplate[2]&nbsp;+&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[1][i-1]&nbsp;*&nbsp;nTemplate[3]&nbsp;+&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[1][i]&nbsp;*&nbsp;nTemplate[4]&nbsp;+&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[1][i+1]&nbsp;*&nbsp;nTemplate[5]&nbsp;+&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[2][i-1]&nbsp;*&nbsp;nTemplate[6]&nbsp;+&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[2][i]&nbsp;*&nbsp;nTemplate[7]&nbsp;+&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[2][i+1]&nbsp;*&nbsp;nTemplate[8])&nbsp;/&nbsp;16;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLine[0][i-1]&nbsp;=&nbsp;(unsigned&nbsp;<span style="color: #0000FF; ">char</span>)&nbsp;nValue;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
}</div>
<br />来源:http://blog.csdn.net/wqvbjhc/article/details/6065526<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;nR:窗口大小<br /></span><span style="color: #008000; ">*/</span><br /><br /><span style="color: #0000FF; ">void</span>&nbsp;GaussianSmooth2(uchar&nbsp;*pSrcImg,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nW,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nH,<span style="color: #0000FF; ">int</span>&nbsp;nR,&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;sigma,&nbsp;uchar*&nbsp;pDstImg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(NULL==pSrcImg)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i,j,x,y;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;高斯滤波器的数组长度<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;一维高斯数据滤波器</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nSize&nbsp;=&nbsp;nR*nR;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nHalfLen&nbsp;=&nbsp;nR/2;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;窗口长度的1/2</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;*pdKernel&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">float</span>[nSize];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;高斯系数与图象数据的点乘</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;&nbsp;dDotMul&nbsp;&nbsp;=&nbsp;0.0&nbsp;&nbsp;&nbsp;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;高斯滤波系数的总和</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;&nbsp;dWeightSum&nbsp;&nbsp;=&nbsp;0.0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;t&nbsp;=&nbsp;0.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i=0;i&lt;nSize;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;exp(-((i-nHalfLen)*(i-nHalfLen))/(2*sigma*sigma));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdKernel[i]&nbsp;=&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dWeightSum&nbsp;+=&nbsp;t;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i=0;i&lt;nSize;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdKernel[i]/=dWeightSum;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(pDstImg,pSrcImg,nW*nH);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(y=nHalfLen;&nbsp;y&lt;nH-nHalfLen;&nbsp;y++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(x=nHalfLen;&nbsp;x&lt;nW-nHalfLen;&nbsp;x++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dDotMul&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=-nHalfLen;&nbsp;i&lt;=nHalfLen;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(j=-nHalfLen;&nbsp;j&lt;=nHalfLen;&nbsp;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dDotMul&nbsp;+=&nbsp;&nbsp;&nbsp;(pdKernel[(nHalfLen+i)*3&nbsp;+j+nHalfLen]*(<span style="color: #0000FF; ">float</span>(pSrcImg[(y+i)*nW+&nbsp;(j+x)])));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDstImg[y*nW&nbsp;+&nbsp;x]&nbsp;=&nbsp;&nbsp;(<span style="color: #0000FF; ">int</span>)&nbsp;(dDotMul);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]&nbsp;pdKernel;<br />}</div><img src ="http://www.cppblog.com/aaxron/aggbug/213932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-07-13 17:25 <a href="http://www.cppblog.com/aaxron/archive/2016/07/13/213932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>直方图均衡化</title><link>http://www.cppblog.com/aaxron/archive/2016/07/13/213928.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Wed, 13 Jul 2016 07:08:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/07/13/213928.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213928.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/07/13/213928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213928.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213928.html</trackback:ping><description><![CDATA[<div>http://blog.csdn.net/xiaowei_cqu/article/details/7606607#</div><div>http://blog.csdn.net/guoyk1990/article/details/8108667<br /><img src="http://www.cppblog.com/images/cppblog_com/aaxron/2016-07-13_150405.png" width="952" height="332" alt="" /><br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;CFpOpencvTestDlg::OnBnClickedBtnStep2()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;InputImagePath&nbsp;=&nbsp;"D:\\Images\\1.jpg";&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;OutputImagePath("D:\\Images\\8.jpg");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IplImage&nbsp;*&nbsp;image=&nbsp;cvLoadImage(InputImagePath);<br />&nbsp;&nbsp;&nbsp;&nbsp;IplImage*&nbsp;eqlimage=cvCreateImage(cvGetSize(image),image-&gt;depth,3);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">分别均衡化每个信道</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;IplImage*&nbsp;redImage&nbsp;&nbsp;=cvCreateImage(cvGetSize(image),image-&gt;depth,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;IplImage*&nbsp;greenImage=cvCreateImage(cvGetSize(image),image-&gt;depth,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;IplImage*&nbsp;blueImage&nbsp;=cvCreateImage(cvGetSize(image),image-&gt;depth,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;cvSplit(image,blueImage,greenImage,redImage,NULL);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;cvEqualizeHist(redImage,redImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;cvEqualizeHist(greenImage,greenImage);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cvEqualizeHist(blueImage,blueImage);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">均衡化后的图像</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;cvMerge(blueImage,greenImage,redImage,NULL,eqlimage);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">保存图片&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;cvSaveImage(OutputImagePath,&nbsp;eqlimage);&nbsp;&nbsp;<br />}</div><br /><br /><br /></div><img src ="http://www.cppblog.com/aaxron/aggbug/213928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-07-13 15:08 <a href="http://www.cppblog.com/aaxron/archive/2016/07/13/213928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sobel算子</title><link>http://www.cppblog.com/aaxron/archive/2016/07/11/213913.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 11 Jul 2016 07:14:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2016/07/11/213913.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/213913.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2016/07/11/213913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/213913.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/213913.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->索贝尔算子（Sobeloperator）主要用作边缘检测，在技术上，它是一离散性差分算子，用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子，将会产生对应的灰度矢量或是其法矢量<br />Sobel卷积因子为：<br /><br />http:<span style="color: #008000; ">//</span><span style="color: #008000; ">blog.csdn.net/goodshot/article/details/10170073</span><span style="color: #008000; "><br /></span><br />http:<span style="color: #008000; ">//</span><span style="color: #008000; ">blog.csdn.net/yanmy2012/article/details/8110316</span><span style="color: #008000; "><br /></span><br />为了加快算法速度:<br />先缩小图像,步长为2,然后计算梯度,<br /><span style="color: #0000FF; ">void</span>&nbsp;getGrads(unsigned&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;g_lpTemp,&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;g_lpDivide,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;IMGW,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;IMGH,&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;r)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;&nbsp;x,&nbsp;y,&nbsp;i,&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;&nbsp;vx,&nbsp;vy,&nbsp;lvx,&nbsp;lvy;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;&nbsp;&nbsp;*lpSrc&nbsp;=&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;&nbsp;&nbsp;*lpDiv&nbsp;=&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;&nbsp;&nbsp;&nbsp;num;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;gradSum;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;grad;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;r=6;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(y&nbsp;=&nbsp;0;&nbsp;y&nbsp;&lt;&nbsp;IMGH/2;&nbsp;y++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(x&nbsp;=&nbsp;0;&nbsp;x&nbsp;&lt;&nbsp;IMGW/2;&nbsp;x++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpDiv&nbsp;=&nbsp;g_lpDivide&nbsp;+&nbsp;2*y*IMGW&nbsp;+&nbsp;2*x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvx&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lvy&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gradSum&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;-r;&nbsp;i&nbsp;&lt;=&nbsp;r;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;为提高速度，步长为2</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(y+i&lt;1&nbsp;||&nbsp;y+i&gt;=IMGH/2-1)&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(j&nbsp;=&nbsp;-r;&nbsp;j&nbsp;&lt;=&nbsp;r;&nbsp;j++)&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;为提高速度，步长为2</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(x+j&lt;1&nbsp;||&nbsp;x+j&gt;=IMGW/2-1)&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpSrc&nbsp;=&nbsp;g_lpTemp&nbsp;+&nbsp;(y+i)*(IMGW/2)&nbsp;+&nbsp;x+j;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">求x方向偏导</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vx&nbsp;=&nbsp;*(lpSrc&nbsp;+&nbsp;IMGW/2&nbsp;+&nbsp;1)&nbsp;-&nbsp;*(lpSrc&nbsp;+&nbsp;IMGW/2&nbsp;-&nbsp;1)&nbsp;+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(lpSrc&nbsp;+&nbsp;1)*2&nbsp;-&nbsp;*(lpSrc&nbsp;-&nbsp;1)*2&nbsp;+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(lpSrc&nbsp;-&nbsp;IMGW/2&nbsp;+&nbsp;1)&nbsp;-&nbsp;*(lpSrc&nbsp;-&nbsp;IMGW/2&nbsp;-&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">求y方向偏导</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vy&nbsp;=&nbsp;*(lpSrc&nbsp;+&nbsp;IMGW/2&nbsp;-&nbsp;1)&nbsp;-&nbsp;*(lpSrc&nbsp;-&nbsp;IMGW/2&nbsp;-&nbsp;1)&nbsp;+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(lpSrc&nbsp;+&nbsp;IMGW/2)*2&nbsp;-&nbsp;*(lpSrc&nbsp;-&nbsp;IMGW/2)*2&nbsp;+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(lpSrc&nbsp;+&nbsp;IMGW/2&nbsp;+&nbsp;1)&nbsp;-&nbsp;*(lpSrc&nbsp;-&nbsp;IMGW/2&nbsp;+&nbsp;1);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gradSum&nbsp;+=&nbsp;(labs(vx)+labs(vy));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">gradSum&nbsp;+=&nbsp;vx*vx+vy*vy;</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num++;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(num&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;求幅值，保存到g_lpDivide中，用于分割前景背景</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grad&nbsp;=&nbsp;gradSum/num;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(grad&nbsp;&gt;&nbsp;255)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grad&nbsp;=&nbsp;255;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*lpDiv&nbsp;=&nbsp;(BYTE)grad;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(lpDiv&nbsp;+&nbsp;1)&nbsp;=&nbsp;(BYTE)grad;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(lpDiv&nbsp;+&nbsp;IMGW)&nbsp;=&nbsp;(BYTE)grad;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(lpDiv&nbsp;+&nbsp;IMGW&nbsp;+&nbsp;1)&nbsp;=&nbsp;(BYTE)grad;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><img src ="http://www.cppblog.com/aaxron/aggbug/213913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2016-07-11 15:14 <a href="http://www.cppblog.com/aaxron/archive/2016/07/11/213913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>