#include"opencv2/opencv.hpp"#includeusingnamespacestd;usi ngnamespacecv;voidfillHole(constMatsrcBw,Mat&dstBw){Sizem _Size=srcBw.size();MatTemp=Mat::zeros(m_Size.height+2,m_S ize.width+2,srcBw.type());//延展图像srcBw.copyTo(Temp(Range(1,m_S ize.height+1),Range(1,m_Size.width+1)));cv::floodFill(Temp, Point(0,0),Scalar(255));MatcutImg;//裁剪延展的图像Temp(Range(1,m_Si ze.height+1),Range(1,m_Size.width+1)).copyTo(cutImg);dstBw =srcBw|(~cutImg);}intmain(){Matimg=cv::imread("F://1.jpg") ;Matgray;cvtColor(img,gray,CV_RGB2GRAY);Matbw,sw,dsa;threshol d(gray,bw,0,255,CV_THRESH_BINARY|CV_THRESH_OTSU);Matelemen t=getStructuringElement(MORPH_ELLIPSE,Size(3,3));MatbwFill;f illHole(bw,bwFill);sw=bwFill.clone();for(inti=0;i<2;i+ +){erode(sw,sw,element);}for(inti=0;i<3;i++){dilate(sw, sw,element);}imshow("膨胀",sw);bitwise_and(sw,bwFill,dsa);//膨胀与填 充后原图进行与运算imshow("原图",img);imshow("灰度",gray);imshow("填充前",bw);// 二值分割图imshow("填充后",bwFill);imshow("与后图像",dsa);waitKey();return0;} |
|