open cv轮廓发现

本文介绍了OpenCV中用于在二值图像上发现轮廓的findContours API,详细讲解了其参数和工作原理,并提供了轮廓发现的基本步骤,包括灰度转换、边缘提取、轮廓查找和绘制。还探讨了轮廓的层次关系和近似处理方法。
摘要由CSDN通过智能技术生成

轮廓发现(find contour)

轮廓是图像的特征

首先了解一下轮廓的定义。一个轮廓代表一系列的点(像素)
这一系列的点构成一个有序的点集,所以可以把一个轮廓理解为一个有序的点集

轮廓不是边缘(轮廓是在边缘的基础上寻找的)

轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法
所以边缘提取的阈值选定会影响最终轮廓发现结果


2、API介绍

findContours发现轮廓

二值图像上发现轮廓使用API
findContours
(
InputOutputArray src,//输入图像,非0的像素被看成1,0的像素保持不变,8bits
OutputArray of Arrays contours,//全部发现的轮廓对象
OutputArray hierarchy,//图像的拓扑结构,可选,该轮廓发现算法正是基于图像拓扑结构实现
int mode,//轮廓返回的模式 一般返回 去 的模式
int method,//发现方法
Point offset=Point()//轮廓像素的位移,默认(0,0)没有位移
)

drawContours绘制轮廓

对发现的轮廓进行绘制显示
drawContours
(
InputOutputArray,//绘制到输出图像
OutputArrays contours,//全部发现的轮廓对象
int contourldx,//轮廓索引号
const Scalar & color,//绘制颜色(可以每个轮廓都不一样的颜色)
int thickness,//绘制线宽
int lineType,//线的类型LINE_8
InputArray hierarchy,//拓扑结构图 可选层次信息结构,这里面是findContours所的到的基于Contours的层级信息
int maxlevel,//最大层数,0只绘制当前的,1表示绘制当前及其内嵌的轮廓
Point offset=Point()//轮廓位移,可选
)

3、步骤

输入图像转为灰度图像cvtColor
使用Canny进行边缘提取,取得二值图像
使用findContours寻找轮廓
使用drawContours绘制轮廓

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
#include <math.h>

using namespace cv;
using namespace std;

Mat src, dst;
int thre=100;
int threMax = 255;
int RTER;
int CHAIN=1;
int MAX = 3;

void Contours(int, void*);

string convertToString(int d);//将double型数据转为字符型

int main()
{
   

	src = imread("D:/实验台/机器视觉/测试图片/轮廓发现3.jpg");
	if (src.empty())//如果src这个数据库属性为空
	{
   
		cout << "无法打开" << endl;
		return -1;
	}
	imshow("原图", src);

	//图片预处理 在二值化提取边缘之前进行高斯模糊和灰度化处理
    GaussianBlur(src, src, Size(3, 3), 0, 0);
	cvtColor(src, src, CV_BGR2GRAY);
	
	namedWindow("轮廓发现",CV_WINDOW_AUTOSIZE);
	createTrackbar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值