OpenCV 检测出图像中的“对号”

 测试图片:

测试结果: 

 

int main(int argc, char* argv[])
{

IplImage* src , *srcContours ,*srcHErode,*srcVErode ,*srcLast;
IplImage* srcColor;
int x,y;

src = cvLoadImage("1.jpg" , CV_LOAD_IMAGE_GRAYSCALE);
srcColor = cvLoadImage("1.jpg");

srcContours = cvCreateImage(cvGetSize(src),8,1);
srcHErode = cvCreateImage(cvGetSize(src),8,1);
srcVErode = cvCreateImage(cvGetSize(src),8,1);
srcLast = cvCreateImage(cvGetSize(src),8,1);

cvZero(srcContours);
cvZero(srcHErode);
cvZero(srcVErode);
cvZero(srcLast); 

k_means(src);

cvThreshold(src,src,100,255,CV_THRESH_BINARY_INV);

getContours(src,srcContours);

getVerticErode(srcContours , srcHErode);
getHoriErode(srcContours , srcVErode);



for( y=0;y<srcContours->height;y++)
{
for( x=0;x<srcContours->width;x++)
{
int valueHErode,valueVErode,valueSrc;

valueHErode = cvGetReal2D(srcHErode,y,x);
valueVErode = cvGetReal2D(srcVErode ,y ,x);
valueSrc = cvGetReal2D(srcContours,y,x);

if(valueVErode<100 && valueHErode<100)
{
cvSetReal2D(srcLast , y,x,valueSrc);
}
}
}

cvDilate(srcLast,src);
cvErode(src,srcLast);


cvCopy(srcLast,srcContours);
getVerticErode(srcContours , srcHErode);
getHoriErode(srcContours , srcVErode);


cvZero(srcLast);
for( y=0;y<srcContours->height;y++)
{
for( x=0;x<srcContours->width;x++)
{
int valueHErode,valueVErode,valueSrc;

valueHErode = cvGetReal2D(srcHErode,y,x);
valueVErode = cvGetReal2D(srcVErode ,y ,x);
valueSrc = cvGetReal2D(srcContours,y,x);

if(valueVErode<100 && valueHErode<100)
{
cvSetReal2D(srcLast , y,x,valueSrc);
}
}
}

cvDilate(srcLast,src);
cvErode(src,srcLast);



CvRect* rectResult = (CvRect*)malloc(sizeof(CvRect)*30);

int rectCount = removeSmallContours(srcLast,rectResult);

for(int i=0;i<rectCount;i++)
{
cvDrawRect(srcColor,cvPoint(rectResult[i].x,rectResult[i].y)
,cvPoint(rectResult[i].x+rectResult[i].width,rectResult[i].y+rectResult[i].height)
,cvScalar(0,0,255));
}



cvNamedWindow("src");
cvShowImage("src",srcColor);

cvWaitKey(0);


cvReleaseImage(&src);
cvReleaseImage(&srcColor);

cvReleaseImage(&srcContours);
cvReleaseImage(&srcHErode);
cvReleaseImage(&srcVErode);
cvReleaseImage(&srcLast); 


return 0;
}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值