• 大小: 5KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: 其他
  • 标签:

资源简介

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!“ << endl;
    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

评论

共有 条评论