#include<opencv2/highgui/highgui.hpp>#include<opencv2/ml/ml.hpp>#include<opencv2/imgproc/imgproc.hpp>usingnamespacecv;constintGREEN_MIN=21;constintGREEN_MAX=110;voidmain(intargc,char**argv){Matsrc=imread("1.jpg");//Исходное изображениеimshow("input",src);imwrite("src.jpg",src);//Переводим в формат HSVMathsv=Mat(src.cols,src.rows,8,3);//vector<Mat>splitedHsv=vector<Mat>();cvtColor(src,hsv,CV_BGR2HSV);split(hsv,splitedHsv);//Удаляем фонfor(inty=0;y<hsv.cols;y++){for(intx=0;x<hsv.rows;x++){// получаем HSV-компоненты пикселяintH=static_cast<int>(splitedHsv[0].at<uchar>(x,y));// ТонintS=static_cast<int>(splitedHsv[1].at<uchar>(x,y));// ИнтенсивностьintV=static_cast<int>(splitedHsv[2].at<uchar>(x,y));// Яркость//Если яркость слишком низкая либо Тон не попадает у заданный диапазон, то закрашиваем белымif((V<20)||(H<GREEN_MIN)||(H>GREEN_MAX)){src.at<Vec3b>(x,y)[0]=255;src.at<Vec3b>(x,y)[1]=255;src.at<Vec3b>(x,y)[2]=255;}}}Mattmp;//Морфологическое замыкание для удаления остаточных шумов.intan=5;Matelement=getStructuringElement(MORPH_ELLIPSE,Size(an*2+1,an*2+1),Point(an,an));dilate(src,tmp,element);erode(tmp,tmp,element);//Переводим изображение в чернобелый форматMatgrayscaleMat;cvtColor(tmp,grayscaleMat,CV_BGR2GRAY);//Делаем бинарную маскуMatmask(grayscaleMat.size(),grayscaleMat.type());Matout(src.size(),src.type());threshold(grayscaleMat,mask,200,255,THRESH_BINARY_INV);//Финальное изображение редварительно красим в белый цветout=Scalar::all(255);//Копируем зашумленное изображение через маскуsrc.copyTo(out,mask);imshow("До замыкания",src);imshow("Результат замыкания",tmp);imshow("Результат",out);waitKey();}
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.