OpenCV图像轮廓的绘制方法
OpenCV图像轮廓的绘制方法,博智网带你了解详细信息 。
本文实例为大家分享了检测几何图形轮廓和检测花朵图形轮廓,供大家参考,具体内容如下
OpenCV绘制图像轮廓绘制轮廓的一般步骤:
1、读取图像
image = cv2.imread('image_path')
2、将原图转化为灰度图像
image_gray= cv.cvtColor(image, cv.COLOR_BGR2GRAY)
3、将灰度图像进行二值化阈值处理
# 这里将阈值设置为127为例,最大阈值为255t, binary = cv.threshold(image_gray, 127, 255, cv.THRESH_BINARY)
4、检测二值化图像中边缘轮廓
# 这里以检测所有轮廓,不建立层次关系为例contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
5、在原图上绘制图像
# 这里将轮廓索引设置为-1,绘制出所有轮廓,颜色设置为红色,宽度为2为例cv2.drawContours(image, contours, -1, (0, 0, 255), 2)
6、显示图像
【OpenCV图像轮廓的绘制方法】cv2.imshow('image', image)
测试检测几何图形轮廓:代码如下:
# -*- coding: utf-8 -*-# @Time: 2021/8/17# @Author: ZYh"""Introduction:图像轮廓检测:OpenCV提供的findContours()方法可以通过计算图像梯度来判断出图像的边缘,然后将边缘的点封装成数组返回contours, hierarchy = cv2.findContours(image, mode, mothode)参数:image->被检测图像必须是8位单通道二值图像 。如果原图是rgb图像,必须转为灰度图像,在进行二值化阈值处理mode->轮廓的检索模式参数值含义cv2.RETR_EXTERNAL只检测外轮廓cv2.RETR_LIST检测所有轮廓,但不建立层次关系cv2.RETR_CCOMP检测所有轮廓,并建立两级层次关系cv2.RETR_TREE检测所有轮廓,并建立树状结构的层次关系mothode->检测轮廓时使用的方法参数值含义cv2.CHAIN_NONE储存轮廓上的所有点cv2.CHAIN_APPROX_SIMPLE只保存水平、垂直或对角线轮廓的端点cv2.CHAIN_APPROX_TC89_L1Ten_Chinl近似算法的一种cv2.CHAIN_APPROX_TC89_KCOSTen_Chinl近似算法的一种retval:contours->检测出的所有轮廓,list类型,每一个元素都是某个轮廓的像素坐标数组hierarchy->轮廓之间的层次关系图像轮廓绘制:image = cv2.drawContours(image, contours, contourIdx, color, thickness, lineTypee, hierarchy,maxLevel, offse)参数:image->被绘制轮廓的原始图像,可以是多通道图像contours->findContours()方法得出的轮廓列表contourIdx->绘制轮廓的索引,如果为-1则绘制所有轮廓color:绘制颜色,BGR格式thickness->可选参数,画笔的粗细,如果为-1则绘制实心轮廓lineTypee->可选参数,绘制轮廓的线型hierarchy->可选参数,findContours()方法得出的层次关系maxLevel->可选参数,绘制轮廓的层次深度,最深绘制第maxLevel层offse->可选参数,偏移量,可以改变绘制结果的位置"""import cv2 as cv# 读取加载图像image1 = cv.imread('shape1.png')image2 = cv.imread('shape1.png')# 将图像由RGB格式转为灰度图像gray1 = cv.cvtColor(image1, cv.COLOR_BGR2GRAY)gray2 = cv.cvtColor(image2, cv.COLOR_BGR2GRAY)# 将图像进行二值化阈值处理, 返回t是处理时采用的阈值,binary是阈值处理后的图像t1, binary1 = cv.threshold(gray1, 127, 255, cv.THRESH_BINARY)t2, binary2 = cv.threshold(gray2, 127, 255, cv.THRESH_BINARY)# 检测图像中出现的所有轮廓,记录轮廓的每一个点contours1, hierarchy1 = cv.findContours(binary1, cv.RETR_LIST, cv.CHAIN_APPROX_NONE)# 显示原图cv.imshow('image', image1)# 绘制所有轮廓,宽度为3,颜色为红色cv.drawContours(image1, contours1, -1, (0, 0, 255), 3)cv.imshow('cv.RETR_LIST', image1)# 检测图像中的外轮廓,记录轮廓的每一个点contours2, hierarchy2 = cv.findContours(binary2, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)# 使用cv2.RETR_EXTERNAL做参数绘制外轮廓,宽度为3,颜色为蓝色cv.drawContours(image2, contours2, -1, (255, 0, 0), 3)cv.imshow('cv.RETR_EXTERNAL', image2)cv.waitKey()cv.destroyAllWindows()
运行结果:



以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持趣讯吧 。
推荐阅读
- ai轮廓该咋地才可以取消
- ps羽化在哪
- Ai要如何才可以取消轮廓
- 为什么投屏只有声音没有图像
- ai轮廓该咋滴才可以取消
- Ai要咋才可以取消轮廓
- ai轮廓该咋得才可以取消
- 如何画极坐标的图像用什么软件
- 如何建立一个空白BMP图像文件
- Ai要怎么样才可以取消轮廓
