测试图片:

opencv 数字检查_#include

code:

#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv\cxcore.h>
#include <stdlib.h>
#include <stdio.h>


int main(){

	IplImage* src = NULL;
	src = cvLoadImage("C:\\Users\\zxl\\Desktop\\1.png", 1);

	if (!src){
		return -1;
	}

	IplImage* pImgGray = cvCreateImage(cvGetSize(src), 8, 1);
	cvCvtColor(src, pImgGray, CV_BGR2GRAY);
	cvThreshold(pImgGray, pImgGray, 80, 255, CV_THRESH_BINARY_INV);
	IplConvKernel* element1 = cvCreateStructuringElementEx(3,1,1,0,CV_SHAPE_RECT,0);
	cvErode(pImgGray, pImgGray, element1, 1);
	cvDilate(pImgGray, pImgGray, element1, 1);
	IplConvKernel* element2 = cvCreateStructuringElementEx(1,3,0,1,CV_SHAPE_RECT,0);
	cvDilate(pImgGray, pImgGray, element2, 1);
	CvMemStorage* storage = cvCreateMemStorage(0);
	CvSeq* contour = NULL;
	IplImage* pImgEdge = cvCloneImage(pImgGray);
	int count = cvFindContours(pImgEdge, storage, &contour, sizeof(CvContour), 
		CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0)); 
	int num = 0;
	for (; contour; contour = contour->h_next){
		CvRect rect = cvBoundingRect(contour, 0);
		if ((rect.x > 30) && (rect.x+rect.width+30 < src->width) && (rect.y > 30) && (rect.y+rect.height+60 < src->height)){
		//原始图像左右两侧一段可忽略,图像下面由于写入了ww......com这里也忽略
			cvDrawContours(src, contour, CV_RGB(255,0,0), CV_RGB(255,0,0),0, 1, 8, cvPoint(0,0));
			num++;
		}
	}
	//printf("count=%d,num=%d\n", count, num);
	cvNamedWindow("imgSrc", 1);
	cvNamedWindow("imgGray", 1);
	cvShowImage("imgSrc", src);
	cvShowImage("imgGray", pImgGray);
	cvWaitKey(0);
	//cvSaveImage("contour.jpg", src);
	//cvSaveImage("binary.jpg", pImgGray);
	cvReleaseImage(&pImgEdge);
	cvReleaseStructuringElement(&element2);
	cvReleaseStructuringElement(&element1);
	cvDestroyAllWindows();
	cvReleaseImage(&pImgGray);
	cvReleaseImage(&src);
	return 0;
}