opencv3学习笔记——查找并绘制轮廓findContours

函数
findContours()
drawContours()
findcontours与drawcontours配合使用,用findcontours找出轮廓后,便可以用drawcontours函数将检测到的轮廓绘制出来。

完整代码

#include<opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;


Mat srcimage, grayimage;
int g_threshold = 80, thresholdmax = 255;
Mat cannyoutput;
RNG rng(12345);

vector<vector<Point>> contours;
vector<Vec4i>hierarchy;

void on_threshold(int, void*);

int main()
{	
	srcimage = imread("1.jpg");
	//转换为灰度图并模糊化降噪
	cvtColor(srcimage, grayimage, COLOR_BGR2GRAY);
	blur(grayimage, grayimage, Size(3 ,3));

	//创建窗口
	namedWindow("【原始图窗口】", WINDOW_AUTOSIZE);
	imshow("【原始图窗口】", srcimage);

	//创建滚动条并初始化
	createTrackbar("canny阈值", "【原始图窗口】", &g_threshold, thresholdmax, on_threshold);
	on_threshold(0, 0);

	waitKey(0);
	return(0);
	
}
//回调函数
void on_threshold(int, void*)
{	
	//canny边缘检测
	Canny(grayimage, cannyoutput, g_threshold, g_threshold * 2, 3);
	
	//寻找轮廓
	findContours(cannyoutput, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));

	//绘制轮廓
	Mat drawing = Mat::zeros(cannyoutput.size(), CV_8UC3);
	//遍历contours里的轮廓
	for (int i = 0; i < contours.size(); i++)
	{
		Scalar color = Scalar(rng.uniform(0, 255),rng.uniform(0,255),rng.uniform(0,255));//随机取轮廓颜色
		drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point());//描绘轮廓
	}
	imshow("【轮廓图】", drawing);
}

运行截图
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值