您的位置:首页 > 运维架构

opencv开发笔记(十三):寻找和绘制物体的凸包

2017-09-24 11:14 323 查看
// 寻找和绘制物体的凸包.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

#include<opencv2/highgui/highgui.hpp>

#include<opencv2/imgproc/imgproc.hpp>

using namespace cv;

using namespace std;

#define window1 "原始图"

#define window2 "效果图"

Mat src, gray;

int nth = 50;

int nthmax = 255;

RNG rng(12345);

Mat srccopy = src.clone();

Mat output;

vector<vector<Point>>counts;

vector<Vec4i>vhi;

void ontresh(int,void *);

int main()

{   
src = imread("E:\\Pictures\\1.jpg");
cvtColor(src, gray, COLOR_BGR2GRAY);
blur(gray,gray,Size(3,3));
imshow(window1,src);
createTrackbar("阈值",window1,&nth,nthmax,ontresh);
ontresh(0, 0);
waitKey(0);

    return 0;

}

void ontresh(int, void *) {

threshold(gray,output,nth,255,THRESH_BINARY); //图像二值话控制阈值
findContours(output,counts,vhi,RETR_TREE,CHAIN_APPROX_SIMPLE,Point(0,0));//寻找轮廓

//遍历每个轮廓寻找凸包
vector<vector<Point>>hull(counts.size());
for (unsigned int i = 0; i<counts.size();i++) {
convexHull(Mat(counts[i]), hull[i], false);

}

//绘制轮廓和凸包
Mat draw = Mat::zeros(output.size(), CV_8UC3);
for (unsigned int i = 0; i < counts.size(); i++) {
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
drawContours(draw,counts,i,color,1,8,vector<Vec4i>(),0,Point());
drawContours(draw,hull,i,color,1,8,vector<Vec4i>(),0,Point());
}
imshow(window2,draw);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐