資源簡介
基于Opencv實(shí)現(xiàn)的圖像糾偏算法,使用的是邊緣檢測。先進(jìn)行圖像二值化,在進(jìn)行黑邊裁剪,最后進(jìn)行糾偏旋轉(zhuǎn)
代碼利用改進(jìn)hough變換實(shí)現(xiàn)圖像旋轉(zhuǎn)糾偏

代碼片段和文件信息
//注:坐標(biāo)按(第x行,第y列)考慮
//所做處理即為填充顏色
//aveGray為填充顏色的灰度值,即圖片背景灰度值
#include?“cvBillPreprocess.h“
IplImage*?cvEdgeRemoveED(IplImage*?src) //采用腐蝕膨脹算法實(shí)現(xiàn)黑邊去除
{
IplImage*?pic?=?cvCloneImage(src);
IplImage*?dst?=?cvCloneImage(src);
int?i=0j=0;
int?al=0;
int?cc=0;
//用圖像中間區(qū)域的平均灰度值作為閾值對圖像進(jìn)行二值化
for?(i=pic->height/4;iheight*3/4;i++)
{
for?(j=pic->widthStep/4;jwidthStep*3/4;j++)
{
cc++;
al?=?al?+?(int)((uchar*)(pic->imageData+pic->widthStep*i))[j];
}
}
int?ave?=?al/cc;
int?th=ave-20;
cvThreshold(picpicth255CV_THRESH_BINARY);
//先膨脹后腐蝕處理圖片
cvDilate(picpicNULL10);
cvErode(picpicNULL10);
//對黑色區(qū)域進(jìn)行處理
division(picdstave);
//cvSmooth(dstdst);
cvReleaseImage(&pic);
return?dst;
}
IplImage*?cvDeleteLines(IplImage*?src) //除去圖片中的線條
{
IplImage*?pic=cvCloneImage(src);
IplImage*?dst?=?NULL;
if?(pic->depth!=8)
{
printf_s(“只處理灰度圖片!\n“);
exit(-1);
}
dst?=?cvCloneImage(pic);
int?i=0j=0width=pic->widthheight?=?pic->heightave?=?0;
int?xsize=0ysize=0size=95count=0;
double?al=0rr=0gg=0bb=0;
int?cc=0th=0;
//以平均灰度值為自適應(yīng)閾值對圖像進(jìn)行二值化處理
for?(i=0;iheight;i++)
{
for?(j=0;jwidth;j++)
{
cc++;
al?=?al?+?(double)((uchar*)(pic->imageData+pic->widthStep*i))[j];
}
}
ave?=?(int)(al/cc);
th=ave-10;
cvThreshold(picpicth255CV_THRESH_BINARY);
//先處理水平線
xsize?=?1;ysize?=?size;count=0;
for?(i=0;i {
for?(j=4;j {
if(getGValue(picij)<150) //對黑點(diǎn)處理
{
if(count>size/2){ //之前已經(jīng)有了很多黑點(diǎn)
if?(getScale(picijxsizeysize/2+10.95)) //之后也有很多黑邊點(diǎn),說明這些點(diǎn)應(yīng)該為一條直線上的點(diǎn)
{
//將之前所有的點(diǎn)都進(jìn)行處理,并稍稍擴(kuò)張線條長度
go2Head(dstcountijave);
getHead(picdstij-countave);
go2End(dstysize/2ijave);
j?=?getEnd(picdstij+ysize/2ave); //之后所有的黑點(diǎn)全部涂白
}
count=0; //接下來的點(diǎn)必然是白點(diǎn)
}
else //之前的黑點(diǎn)還不夠多,沒有用模板檢查的必要
{
count++;
}
}
else //不是黑點(diǎn)
{
if?(count!=0) //該白點(diǎn)之前有黑點(diǎn)
{
if?(getScale(picij-4190.6)) //判斷該白點(diǎn)是不是線條上的斷點(diǎn)
{
count++; //如果是,則繼續(xù)搜索下一個黑點(diǎn)
}
else?count?=?0; //不是斷點(diǎn)則是白色區(qū)域的開始,說明剛才的線條太短,重新開始計(jì)數(shù)以檢測下一條直線
}
}
}
count=0;
}
//列操作與行操作完全對稱
xsize?=?size;ysize?=?1;count=0;
for?(j=0;j {
for?(i=4;i {
if(getGValue(picij)<150)
{
if(count>size/2)
{
if?(getScale(picijxsize/2+1ysize0.95))
{
go2UpHead(dstcountijave);
getUpHead(picdsti-countjave);
go2LowEnd(dstxsize/2ijave);
i?=?getLowEnd(picdsti+xsize/2jave);?
}
count?=?0;
}
else
{
count++;
}
}
else?
{
if?(count!=0)
{
if?(getScale(pici-4j910.6))
{
count++;
}
else?count=0;
}
}
}
count=0;
}
cvReleaseImage(&pic);
return?dst;
}
IplImage*?cvEdgeRemove(IplImage*?src)
{
IplImage*?pic?=?cvClon
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????16227??2010-07-20?15:19??改進(jìn)Hough變換實(shí)現(xiàn)圖像糾偏\cvBillPreprocess.cpp
?????文件???????1988??2010-07-20?15:19??改進(jìn)Hough變換實(shí)現(xiàn)圖像糾偏\cvBillPreprocess.h
?????文件????????215??2010-07-21?09:36??改進(jìn)Hough變換實(shí)現(xiàn)圖像糾偏\stdafx.cpp
?????文件????????233??2010-07-21?09:36??改進(jìn)Hough變換實(shí)現(xiàn)圖像糾偏\stdafx.h
?????文件?????502991??2010-07-09?09:07??改進(jìn)Hough變換實(shí)現(xiàn)圖像糾偏\用改進(jìn)的Hough變換檢測交通標(biāo)志圖像的直線特征.pdf
?????目錄??????????0??2011-05-14?09:27??改進(jìn)Hough變換實(shí)現(xiàn)圖像糾偏
-----------?---------??----------?-----??----
???????????????521654????????????????????6
評論
共有 條評論