資源簡介
blog.csdn.net/u014679795/article/details/78696444
批量圖像自動分割 opencv grabcut

代碼片段和文件信息
#include?
#include?“opencv2/opencv.hpp“
#include?
#include?
#include?
#include?
#include
#ifdef?linux
#include?
#include?
#endif
#ifdef?WIN32
#include?
#include?
#endif
using?namespace?std;
using?namespace?cv;
vector?getFiles(string?cate_dir);
bool?debug=false;
static?void?getBinMask(?const?Mat&?comMask?Mat&?binMask?){
????binMask.create(?comMask.size()?CV_8UC1?);
????binMask?=?comMask?&?1;
}
Mat?getWhitePart(Mat?img)
{
????Mat?gray;
????cvtColor(imggrayCV_BGR2GRAY);
????Mat?mask;
????int?t1=20;
????int?t2=180;
????Mat?element0?=?getStructuringElement(MORPH_RECT?Size(t1?t1));
????Mat?element1?=?getStructuringElement(MORPH_RECT?Size(t2?t2));
????//閾值分割,提取前景的大致輪廓
????threshold(graymask0255THRESH_BINARY|CV_THRESH_OTSU);
????if(debug)
????????imshow(“mask0“mask);
????erode(mask?mask?element0);
????if(debug)
????????imshow(“mask1“mask);
????dilate(maskmask?element1);
????erode(maskmaskelement1);
????dilate(maskmask?element0);
????//提取白布里面的部分
????if(debug)
????????imshow(“mask2“mask);
????Mat?binMaskmask1;
????getBinMask(maskbinMask);
????img.copyTo(mask1?binMask);
????//mask1是白布中內容
????if(debug)
????????imshow(“白布“?mask1);
????return?mask1;
}
Mat?grabCutImage(Mat?img)
{
????Mat?gray;
????cvtColor(imggrayCV_BGR2GRAY);
????Mat?mask;
????int?t1=50;
????int?t2=10;
????Mat?element0?=?getStructuringElement(MORPH_RECT?Size(t1?t1));
????Mat?element1?=?getStructuringElement(MORPH_RECT?Size(t2?t2));
????//閾值分割,提取前景的大致輪廓
????threshold(graymask0255THRESH_BINARY|CV_THRESH_OTSU);
????if(debug)?imshow(“閾值分割“mask);
????//膨脹,去掉噪點
????dilate(maskmask?element1);
????if(debug)?imshow(“膨脹“mask);
????//腐蝕,得到整塊的小車位置
????erode(mask?mask?element0);
????if(debug)?imshow(“腐蝕“mask);
????//構造grabcut的mask
????for(int?i=0;i ????{
????????for(int?j=0;j ????????{
????????????if(mask.at(ij)>100)
????????????????mask.at(ij)=cv::GC_PR_BGD;//標記為可能的背景
????????????else
????????????????mask.at(ij)=cv::GC_PR_FGD;//標記為可能的前景
????????}
????}
???//?imshow(“mask3“mask);
????//Mat?out;
????Mat?bgModelfgModel;
????grabCut(imgmaskRect(00img.colsimg.rows)bgModelfgModel1?cv::GC_INIT_WITH_MASK);
???//?imshow(“mask4“mask);
????Mat?binMask1res;
????getBinMask(maskbinMask1);
????img.copyTo(res?binMask1);
????return?res;
}
int?main()
{
????cout?<“Hello?World!“?<????string?basePath=“/home/pzy/Pictures/image-cut/“;
????string?outputPath=“/home/pzy/Pictures/orig/“;
????vector?fileName=getFiles(basePath);
#pragma?omp?parallel?for
????for(int?i=0;i ????{
????????string?filePath=basePath+fileName.at(i);
????????cout< ????????Mat?img=imread(filePath);
????????if(img.empty())
????????{
????????????cerr<<“讀不到該圖像!“< ????????????continue;
????????}
????????resize(imgimgSize(img.cols/3img.rows/3));
????????imwrite(outputPath+fileNam
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-12-02?08:03??thresholded\
?????文件????????5403??2017-12-02?08:03??thresholded\main.cpp
?????文件???????12256??2017-12-02?01:47??thresholded\CMakeLists.txt.user
?????文件?????????666??2017-12-02?07:31??thresholded\CMakeLists.txt
- 上一篇:AODV算法在NS2下仿真
- 下一篇:surf論文翻譯
評論
共有 條評論