测试图片:
代码:
#include "stdafx.h" #include <cv.h> #include <highgui.h> int _tmain(int argc, _TCHAR* argv[]) { IplImage * pImg=cvLoadImage("c://test.jpg",0); cvNamedWindow("ShowImage",1); cvNamedWindow("result",1); cvNamedWindow("result_h",1); CvScalar s,t; cvSmooth( pImg, pImg, CV_BLUR, 3, 3, 0, 0 ); cvThreshold( pImg, pImg ,50, 255, CV_THRESH_BINARY_INV ); //取阀值为50把图像转为二值图像 int* v=new int[pImg->width]; int* h=new int[pImg->height]; for(int i=0;i<pImg->width;i++) v[i]=0; for(int i=0;i<pImg->height;i++) h[i]=0; for(int x=0;x<pImg->width;x++){ for(int y=0;y<pImg->height;y++){ s=cvGet2D(pImg,y,x); ///t=cvGet2D(paint,y,x); if(s.val[0]==0) v[x]++; //cvSet2D(paint,y,x,t); } } for(int y=0;y<pImg->height;y++){ for(int x=0;x<pImg->width;x++){ s=cvGet2D(pImg,y,x); ///t=cvGet2D(paint,y,x); if(s.val[0]==0) h[y]++; } } IplImage* paint=cvCreateImage( cvGetSize(pImg),IPL_DEPTH_8U, 1 ); IplImage* painty=cvCreateImage( cvGetSize(pImg),IPL_DEPTH_8U, 1 ); cvZero(paint); cvZero(painty); for(int x=0;x<pImg->width;x++){ for(int y=0;y<v[x];y++){ t=cvGet2D(paint,y,x); //s=cvGet2D(paint,y,x); ///t=cvGet2D(paint,y,x); t.val[0]=255; cvSet2D(paint,y,x,t); } } //----------h------------ for(int y=0;y<pImg->height;y++){ for(int x=0;x<h[y];x++){ t=cvGet2D(painty,y,x); //s=cvGet2D(paint,y,x); ///t=cvGet2D(paint,y,x); t.val[0]=255; cvSet2D(painty,y,x,t); } } cvShowImage("result",paint); cvSaveImage("c://tou.jpg",paint); cvShowImage("result_h",painty); cvShowImage("ShowImage",pImg); cvWaitKey(0); cvDestroyWindow("ShowImage"); return 0; }