Created
April 19, 2014 01:10
-
-
Save longbuilder/11070438 to your computer and use it in GitHub Desktop.
opencv image segment
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//转换为灰度图 | |
IplImage* pGrayImage = cvLoadImage( "image0.bmp", 0); | |
//利用Canny算子进行边缘检测 | |
IplImage * pCannyImg=cvCreateImage(cvGetSize(pGrayImage),pGrayImage->depth,1); | |
cvCanny(pGrayImage,pCannyImg,50,150,3); | |
//膨胀,使边缘轮廓闭合 | |
IplImage * pDilateImg=cvCreateImage(cvGetSize(pGrayImage),pGrayImage->depth,1); | |
IplConvKernel *rect_2; | |
rect_2 = cvCreateStructuringElementEx(2, 3, 1, 1, CV_SHAPE_RECT); | |
cvDilate(pCannyImg, pDilateImg); | |
//检测图片轮廓 | |
CvMemStorage * storage = cvCreateMemStorage(0); | |
CvSeq * contour = 0; | |
int mode = CV_RETR_EXTERNAL; | |
int num = cvFindContours(pDilateImg,storage,&contour,sizeof(CvContour), | |
CV_RETR_LIST,CV_CHAIN_APPROX_NONE, cvPoint(0,0) ); | |
//用白色填充面积最大的轮廓 | |
double maxArea = 2000; | |
IplImage* pContourImg = cvCreateImage(cvGetSize(pCannyImg), IPL_DEPTH_8U, 3); | |
//初始化为黑色 | |
cvZero(pContourImg); | |
while(contour) | |
{ | |
double area=fabs(cvContourArea(contour, CV_WHOLE_SEQ)); | |
if(area > maxArea) | |
{ | |
cvDrawContours(pContourImg,contour,cvScalarAll(255),cvScalarAll(0),0,CV_FILLED); | |
} | |
contour=contour->h_next; | |
} | |
cvReleaseMemStorage(&storage); | |
//填充图作为mask,与原图像进行按像素与操作 | |
IplImage* pColorImage = cvLoadImage( "image0.bmp", -1); | |
for(int height=0; height{ | |
for(int width = 0; width < 320; width++) | |
{ | |
int piex = height*320+width; | |
if((BYTE)pContourImg->imageData[piex*3] != 255u) | |
{ | |
pColorImage->imageData[piex*3] = 0; | |
pColorImage->imageData[piex*3+1] = 0; | |
pColorImage->imageData[piex*3+2] = 0; | |
} | |
} | |
} | |
//显示保存图像 | |
cvShowImage( "output", pColorImage); | |
cvSaveImage("output.bmp", pColorImage); | |
//释放资源 | |
cvReleaseImage(&pColorImage); | |
cvReleaseImage(&pGrayImage); | |
cvReleaseImage(&pCannyImg); | |
cvReleaseImage(&pDilateImg); | |
cvReleaseImage(&pContourImg); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment