python OpenCV学习笔记(十六):轮廓
2018-02-02 16:53
423 查看
官方文档 – https://docs.opencv.org/3.4.0/d4/d73/tutorial_py_contours_begin.html
image:源图
mode:轮廓检索模式
method:轮廓近似法
如果你有它的边界点,
在图像中画出所有的轮廓:
画一个指定的轮廓线,比如第四条轮廓线:
但是大多数情况下,使用下面的方法
上面,我们说轮廓是一个有着同样强度的边界形状,它存储了边界的(x,y)坐标。但是它是否存储了所有的坐标?这是通过轮廓近似法来确定的。
如果你传入 cv.CHAIN_APPROX_NONE,所有的边界点都被存储。但实际上我们需要所有的点吗?例如,你发现了一条直线的轮廓。你需要线上的所有点来表示这条线吗?不,我们只需要这条线的两个端点。这是cv.CHAIN_APPROX_SIMPLE 。它删除了所有的冗余点,压缩了轮廓,从而节省了内存。
下图显示的是一个矩形的图像。只要是在轮廓列表(contours)中的坐标,就画一个圆(用蓝色表示)。第一张图片显示的是我的cv.CHAIN_APPROX_NONE(734个点)和第二个图像显示带有cv的cv.CHAIN_APPROX_SIMPLE(只有4分)。
轮廓
轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色或强度。轮廓是形状分析和物体检测和识别的有用工具。import numpy as np import cv2 as cv im = cv.imread('test.jpg') imgray = cv.cvtColor(im, cv.COLOR_BGR2GRAY) ret, thresh = cv.threshold(img, 127, 255, 0) im2, contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
image, contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
image:源图
mode:轮廓检索模式
method:轮廓近似法
cv.findContours()方法输出一个经过修改的图像,轮廓列表和层次结构。contours是一张图中所有轮廓线的Python列表。每一个单独的轮廓都是一个(x,y)的边界点的坐标点。
画轮廓
cv.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])
如果你有它的边界点,
cv.drawContours()也可以用来画任何形状。第一个参数是源图像;第二个参数是所有轮廓的一个python列表;第三个参数是轮廓的索引(在绘制个别轮廓是很有用,绘制所有轮廓,则传参 -1);剩下的是颜色,厚度等。
在图像中画出所有的轮廓:
cv.drawContours(img, contours, -1, (0,255,0), 3)
画一个指定的轮廓线,比如第四条轮廓线:
cv.drawContours(img, contours, 3, (0,255,0), 3)
但是大多数情况下,使用下面的方法
cnt = contours[3] cv.drawContours(img, [cnt], 0, (0,255,0), 3)
轮廓近似法
这是cv.findContours()的第三个参数,它表示什么?
上面,我们说轮廓是一个有着同样强度的边界形状,它存储了边界的(x,y)坐标。但是它是否存储了所有的坐标?这是通过轮廓近似法来确定的。
如果你传入 cv.CHAIN_APPROX_NONE,所有的边界点都被存储。但实际上我们需要所有的点吗?例如,你发现了一条直线的轮廓。你需要线上的所有点来表示这条线吗?不,我们只需要这条线的两个端点。这是cv.CHAIN_APPROX_SIMPLE 。它删除了所有的冗余点,压缩了轮廓,从而节省了内存。
下图显示的是一个矩形的图像。只要是在轮廓列表(contours)中的坐标,就画一个圆(用蓝色表示)。第一张图片显示的是我的cv.CHAIN_APPROX_NONE(734个点)和第二个图像显示带有cv的cv.CHAIN_APPROX_SIMPLE(只有4分)。
相关文章推荐
- python OpenCV学习笔记(二十):轮廓层次结构
- python OpenCV学习笔记(十七):轮廓特征
- opencv_python学习笔记十六
- opencv_python学习笔记十六
- Python OpenCV学习笔记之:图像轮廓处理
- Opencv2系列学习笔记10(提取连通区域轮廓)
- opencv_python学习笔记十
- opencv_python学习笔记十七
- python基础教程学习笔记十六
- 【转】Opencv2系列学习笔记10(提取连通区域轮廓)
- Opencv2系列学习笔记10(提取连通区域轮廓)
- python opencv入门(学习笔记no.1)-图片的读入读出
- opencv python 学习笔记(1)
- Python3+OpenCV学习笔记(一):图像加载、显示和保存
- opencv-python 学习笔记1:简单的图片处理
- opencv Python学习笔记(三)调色板加跟随鼠标绘图
- python OpenCV学习笔记直方图反向投影的实现
- Python OpenCV学习笔记之:图像梯度处理:Laplacian,Sobel算子
- Opencv Python版学习笔记(一)图像直方图
- python OpenCV学习笔记之绘制直方图的方法