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);
}
#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);
}
相关文章推荐
- 【OpenCV笔记 15-1】OpenCV寻找物体的凸包convexHull
- Opencv学习之寻找和绘制物体的凸包
- opencv学习笔记 在输入图像上寻找并绘制轮廓
- OpenCV在图像中寻找轮廓和计算图像中物体的凸包
- OpenCV教程 之 寻找物体的轮廓与凸包:findContours、convexHull函数(C++)
- libgdx游戏引擎开发笔记(十三)SuperJumper游戏例子的讲解(篇七)----各个物体的创建及其碰撞检测
- OpenCV之imgproc 模块. 图像处理(5)在图像中寻找轮廓 计算物体的凸包 创建包围轮廓的矩形和圆形边界框 为轮廓创建可倾斜的边界框和椭圆 轮廓矩 多边形测试
- 【openCV笔记2】使用二维特征点(Features2D)和单映射(Homography)寻找已知物体
- 寻找和绘制物体凸包
- OpenCV 2 学习笔记(19): 利用均值漂移(Meanshift)寻找物体
- iOS开发之opencv学习笔记二:使用CascadeClassifier进行对特定物体的跟踪
- libgdx游戏引擎开发笔记(十三)SuperJumper游戏例子的讲解(篇七)----各个物体的创建及其碰撞检测
- opencv开发笔记(十二):查找并绘制轮廓
- Android开发笔记(十三)视图绘制的几个方法
- opencv 2.x学习笔记(十三)绘制直方图
- 【OpenCV笔记 15-2】OpenCV寻找物体最小包围矩形和最小包围圆
- 【OpenCV学习】凸包的绘制
- opengl 开发笔记-绘制图形(图元)
- 基于Android Studio的OpenCV开发环境搭建笔记
- 【阅读笔记之十三】《DIRECTX.9.0.3D游戏开发编程基础》 网格(三)加载小汽车的XFile的demo