• 大小: 453KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-04
  • 语言: 其他
  • 标签: opecv  纠偏  

资源简介

基于Opencv实现的图像纠偏算法,使用的是边缘检测。先进行图像二值化,在进行黑边裁剪,最后进行纠偏旋转 代码利用改进hough变换实现图像旋转纠偏

资源截图

代码片段和文件信息

//注:坐标按(第x行,第y列)考虑
//所做处理即为填充颜色
//aveGray为填充颜色的灰度值,即图片背景灰度值
#include “cvBillPreprocess.h“


IplImage* cvEdgeRemoveED(IplImage* src) //采用腐蚀膨胀算法实现黑边去除
{
IplImage* pic = cvCloneImage(src);
IplImage* dst = cvCloneImage(src);
int i=0j=0;
int al=0;
int cc=0;
//用图像中间区域的平均灰度值作为阈值对图像进行二值化
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);
//对黑色区域进行处理
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;
//以平均灰度值为自适应阈值对图像进行二值化处理
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) //对黑点处理
{
if(count>size/2){ //之前已经有了很多黑点
if (getScale(picijxsizeysize/2+10.95)) //之后也有很多黑边点,说明这些点应该为一条直线上的点
{
//将之前所有的点都进行处理,并稍稍扩张线条长度
go2Head(dstcountijave);
getHead(picdstij-countave);
go2End(dstysize/2ijave);
j = getEnd(picdstij+ysize/2ave); //之后所有的黑点全部涂白
}
count=0; //接下来的点必然是白点
}
else //之前的黑点还不够多,没有用模板检查的必要
{
count++;
}
}
else //不是黑点
{
if (count!=0) //该白点之前有黑点
{
if (getScale(picij-4190.6)) //判断该白点是不是线条上的断点
{
count++; //如果是,则继续搜索下一个黑点
}
else count = 0; //不是断点则是白色区域的开始,说明刚才的线条太短,重新开始计数以检测下一条直线
}
}
}
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  改进Hough变换实现图像纠偏\cvBillPreprocess.cpp

     文件       1988  2010-07-20 15:19  改进Hough变换实现图像纠偏\cvBillPreprocess.h

     文件        215  2010-07-21 09:36  改进Hough变换实现图像纠偏\stdafx.cpp

     文件        233  2010-07-21 09:36  改进Hough变换实现图像纠偏\stdafx.h

     文件     502991  2010-07-09 09:07  改进Hough变换实现图像纠偏\用改进的Hough变换检测交通标志图像的直线特征.pdf

     目录          0  2011-05-14 09:27  改进Hough变换实现图像纠偏

----------- ---------  ---------- -----  ----

               521654                    6


评论

共有 条评论