资源简介
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论文翻译
相关资源
- 将SE模块与密集连接网络结合的代码
- 中国科学院大学——春季学期计算机
- OPENCV人脸检测程序可直接运行
- 计算机视觉中的注意力机制Visual Att
- Faster-RCNN 代码
- 计算机视觉cv面试问题总结--阿里头条
- opencv 视频运动物体检测
- 8点算法计算基础矩阵计算机视觉Ope
- 矩阵理论在计算机视觉专业方面的应
- 数字图像处理第三版
- 国科大研一计算机视觉课程期末试题
- OpenCV 3和Qt5计算机视觉应用开发_源码
- 计算机视觉:一种现代方法课后习题
- 超分辨率等图像处理 ,set5数据集
- SLAM十四讲、双目视觉里程计、麻省理
- 计算机视觉中的数学方法-吴福朝超超
- 计算机视觉视差图SGBM算法
- 计算机视觉 从CV基础到深度学习实战
- 何凯明计算机视觉去雾源码+去雾小应
- LAS 1.4格式定义
- 人脸识别-计算机视觉大作业
- opencv2计算机视觉编程手册(中文)
- 计算机视觉算法与智能车应用.pdf
- 三点解算两个坐标系之间的旋转矩阵
- 张正友标定法论文中英
- 山东大学2019年计算机视觉考题.docx
- haarcascades.7z
- 基于计算机视觉的人脸识别
- 计算机视觉处理高级培训课程从CV基础
- 计算机视觉基础大作业人脸识别
评论
共有 条评论