《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(一)查找并绘制轮廓

第8章 图像轮廓与图像分割修复

8.1 查找并绘制轮廓

8.1.1 寻找轮廓:findContours()函数

1.作用:在二值图像中寻找轮廓
2.函数原型:

void findcontours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())

3.参数说明:
(1)输入图像,8位单通道图像,图像非零像素被保留为0,所以图像为二进制,可以使用cmopare()、inrange()、threshold()、adaptivethreshold()、canny()等函数由灰度图或彩色图创建二进制图像
(2)检测到的轮廓,每个轮廓存储为一个点向量,即用point类型的vector表示
(3)可选的输出向量,包含图像的拓扑信息,作为轮廓数量的表示,每个轮廓contours[i]对应4个hierarchy元素,contours[i][0]~contours[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,对应的hierarchy[i]值设为负数
(4)轮廓检索模式,取值:
            在这里插入图片描述
(5)轮廓近似办法,取值:
            在这里插入图片描述
(6)每个轮廓点的可选偏移量,默认值Point()
4.示例:

vector<vector<Point>>contours;
findContours(image,contours,RETR_EXTERNAL,CHAIN_APPROX_NONE);

8.1.2 绘制轮廓:drawContours()函数

1.作用:用于在图像中绘制外部或内部轮廓
2.函数原型:

void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness=1, int lineType=8, InputArray hierarchy=noArray(), int maxLevel=INT_MAX, Point offset=Point())

3.参数说明:
(1)目标图像
(2)输入轮廓
(3)轮廓绘制指示变量,负值表示绘制所有轮廓
(4)轮廓颜色
(5)轮廓线条粗细度,默认值1,负值会绘制在轮廓内部
(6)线条类型,默认8,可取值:
            在这里插入图片描述
(7)可选的层次结构信息,默认值noArray()
(8)用于绘制轮廓的最大等级,默认值INT_MAX
(9)可选的轮廓偏移参数,默认Point()
4.示例:

Mat result(image.size(),CV_8U,cv::Scalar(255));
drawContours(result,contours,-1,Scalar(0),3,8);

8.1.3 示例程序

1.查找并绘制轮廓示例

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
   
   
	//以二值图模式载入并显示原图
	Mat srcImage = imread(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值