《轮廓查找绘制-opencv_python》

笔记:

    一、导入图片名字不能为中文,会导致报错
    二、threshold函数
        retval代表返回值的阈值、
        dst代表阈值分割结果图像
        img代表要阈值处理的图像、
        127代表要设定的阈值,
        55代表当最后一个参数为THRESH_BINARY或者THRESH_BINARY_INV类型时需设定的最大值
        代表阈值的分割类型
    三、查找图像轮廓:findContours()函数
        1、image与函数参数中的原图像一致 (opencv4~取消第一个参数)
        2、coutours返回的轮廓
        3、hierarchy图像的拓扑信息(轮廓层次)处理后
        A、image:原始图像(灰度图像自动转换为二值化图像)
        B、mode:轮廓检索模式(所用到的是检测外孔和内孔轮廓)
        C、method:轮廓的近似方法(所用到的是储存所有轮廓点)
    四、绘制轮廓:drawContours()
        1、img2:等待绘制轮廓的图像
        2、coutours:要绘制的轮廓(与findContours()函数输出的coutours参数一致《list类型即:列表类型》)
        3、contourIdx:要绘制一条轮廓还是全部轮廓:如果参数是一个整数或者0表示绘制对应索引号的轮廓[如果是-1表示绘制全部轮廓]
        4、color:绘制颜色,用B,G,R格式表示
        5、thickness:表示绘制时的画笔粗细,如果为-1表示用实心绘制
        6、lineType:表示绘制线轮廓时的线形
        7、hierarchy:所输出的层次信息
        8、maxLevel:控制轮廓层次的深度(如果是0表示绘制地0层轮廓)
        9、offset:偏移参数使轮廓偏移一定位置用[ x , y ]坐标表示

 全部代码:

# 设定编码模式为:·utf-8
# -*- coding: utf-8 -*-
# 导入cv2模块并且命名为cv
import cv2 as cv

# 导入图片(!!!图片名不能为中文,不然会导致报错!!!)
o = cv.imread('triangle.jpg')  # 0的解释:将图像调整为单通道的灰色图像
cv.namedWindow('discerns', 0)  # 创建窗口:'discern'为创建窗口的名字;0是为下一步设置窗口尺寸设置的
cv.resizeWindow('discerns', 500, 500)  # 设置窗口尺寸,单位为Px(像素):'discern'为要设置尺寸的窗口
cv.moveWindow("discerns", 400, 200)  # 设置窗口位置
cv.imshow("discerns", o)  # 显示图像:"discern":图像所要显示在的窗口名字;第二个参数:要显示的内容
img2 = cv.cvtColor(o, cv.COLOR_BGR2GRAY)  # 色彩空间转换:第一个参数为要转换的对象,第二个参数为转换类型
retval, binary = cv.threshold(img2, 127, 55, cv.THRESH_BINARY)  # 二值化阈值处理
"""threshold
retval代表返回值的阈值、
dst代表阈值分割结果图像 
img代表要阈值处理的图像、
127代表要设定的阈值,
55代表当最后一个参数为THRESH_BINARY或者THRESH_BINARY_INV类型时需设定的最大值
代表阈值的分割类型
"""
# 查找图像轮廓:findContours()函数
"""查找图像轮廓:findContours()函数
1、image与函数参数中的原图像一致 (opencv4~取消第一个参数)
2、coutours返回的轮廓
3、hierarchy图像的拓扑信息(轮廓层次)处理后
A、image:原始图像(灰度图像自动转换为二值化图像)
B、mode:轮廓检索模式(所用到的是检测外孔和内孔轮廓)
C、method:轮廓的近似方法(所用到的是储存所有轮廓点)
"""
coutours, hierarchy = cv.findContours(binary, cv.RETR_CCOMP, cv.CHAIN_APPROX_NONE)
# 打印轮廓信息
print(coutours)
# 绘制轮廓:drawContours()
"""绘制轮廓:drawContours()
1、img2:等待绘制轮廓的图像
2、coutours:要绘制的轮廓(与findContours()函数输出的coutours参数一致《list类型即:列表类型》)
3、contourIdx:要绘制一条轮廓还是全部轮廓:如果参数是一个整数或者0表示绘制对应索引号的轮廓[如果是-1表示绘制全部轮廓]
4、color:绘制颜色,用B,G,R格式表示
5、thickness:表示绘制时的画笔粗细,如果为-1表示用实心绘制
6、lineType:表示绘制线轮廓时的线形
7、hierarchy:所输出的层次信息
8、maxLevel:控制轮廓层次的深度(如果是0表示绘制地0层轮廓)
9、offset:偏移参数使轮廓偏移一定位置用[ x , y ]坐标表示
"""
o = cv.drawContours(
    image=o,
    contours=coutours,
    contourIdx=-1,
    color=(0, 255, 0),
    thickness=3,
    lineType=cv.LINE_8,
    # hierarchy=cv.findContours(),
    maxLevel=5,
    offset=[0, 0]
)
# 创建窗口:'discern'为创建窗口的名字;0是为下一步设置窗口尺寸设置的
cv.namedWindow('discern', 0)
# 设置窗口尺寸,单位为Px(像素):'discern'为要设置尺寸的窗口
cv.resizeWindow('discern', 500, 500)
# 设置窗口位置
cv.moveWindow("discern", 900, 200)
# 显示图像:"discern":图像所要显示在的窗口名字;第二个参数:要显示的内容
cv.imshow("discern", o)
# 将键盘输入的按键的ASCII值传给变量(如果括号内传参为0,窗口会一直显示,直到有按键输入
# (ASCII值)停止显示,!!!该函数参数的默认值为”0“)
key = cv.waitKey()
# 判断:如果键盘输入"A"释放窗口
if key == ord("A"):
    cv.destroyAllWindows()  # 释放窗口、可以传参:所要释放窗口的名字

运行效果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~RD XIAO Du

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值