资源简介
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
- 上一篇:AODV算法在NS2下仿真
- 下一篇:surf论文翻译
相关资源
- 计算机视觉教程(第2版)
- opencv2.4.9源码分析——SIFT
- SLAM综述文章
- 现代计算机视觉29讲PPT-王伟强
- 基于小波变换的医学图像融合
- 扑克纸牌识别报告
- opencv图像处理方法总结.pdf
- 国科大计算机视觉往年试题
- [高清版]摄像测量学原理与运用研究
- 2016中国人工智能行业系列研究——中
- A Guide to Convolutional Neural Networks for C
- 计算机视觉(贾云德)
- 中科院自动化所三维重建PPT(完整版
- An Experimental Comparison of Min-Cut/Max-Flow
- Robust Image Retargeting via Axis
- Seam Carving for Content-Aware Image Resizing
- Multiple View Geometry in Computer Vision
- 行人检测研究现状和常用方法总结p
- Tsai zhang 计算机视觉 图像处理
- 计算机视觉 一种现代方法 课后习题答
- 胡伟武《计算机体系结构》习题答案
- 计算机视觉中的多视图几何 Multiple
- 计算机视觉3D成像_全景成像
- 全球工程前沿2020.pdf
- 计算机视觉中的数学方法(吴福朝)
- 图像处理与计算机视觉算法及应用配
- 中国科学院大学国科大计算机视觉董
- imageStitching实现图像拼接
- 《计算机视觉 ——计算理论与算法基
- Multiple View Geometry in Computer Vision.2nd
评论
共有 条评论