python_cv_轮廓

在这里插入图片描述

import cv2
    import numpy as np
    #1、 读入图像
    # img = cv2.imread(r"D:\1.jpg", cv2.IMREAD_UNCHANGED)
    # img = cv2.imread(r"9.bmp", cv2.IMREAD_UNCHANGED)
    img = cv2.imread(r"12.jpg", cv2.IMREAD_UNCHANGED)
    # cv2.imshow("contours", img)

    # 2、二值化 ret:暂时就认为是设定的thresh阈值,thresh:二值化的图像
    ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY),  # 转换为灰度图像,
        130, 255,  # >130的=255  否则=0
        cv2.THRESH_BINARY)  # 黑白二值化

    # 3、搜索轮廓: 返回:图像,轮廓,轮廓的层析结构        输入:图像(二值图像),轮廓检索方式,轮廓近似方法
    contours, hierarchy = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    # cv2.RETR_EXTERNAL---只检测外轮廓     # cv2.RETR_LIST---检测的轮廓不建立等级关系
    # cv2.RETR_CCOMP-建立两个等级轮廓,上一层为外边界,里层为内孔边界信息  # cv2.RETR_TREE----建立一个等级树结构的轮廓

    # cv2.CHAIN_APPROX_NONE---存储所有边界点      # cv2.CHAIN_APPROX_SIMPLE---压缩垂直、水平、对角方向,只保留端点
    # cv2.CHAIN_APPROX_TX89_L1---使用teh - Chini近似算法     # cv2.CHAIN_APPROX_TC89_KCOS---使用teh - Chini近似算法

    def rect_contours(c,img):
        # 绘制矩形
        rect = cv2.minAreaRect(c)  # 获得最小矩形轮廓 可能带旋转角度
        box = cv2.boxPoints(rect)  # 计算最小区域坐标
        box = np.int0(box)  # 坐标规范化为整数
        cv2.drawContours(img, [box], 0, (0, 0, 255), 3)  # 画出轮廓

    def circle_contours(c,img):
        # 绘制圆形
        (x, y), radius = cv2.minEnclosingCircle(c)  # 计算最小封闭圆形中心、半径
        center = (int(x), int(y))  # 转换成整数
        radius = int(radius)
        img = cv2.circle(img, center, radius, (0, 255, 0), 2)  #img上_画出圆形

    for c in contours:#循环搜索轮廓
        x, y, w, h = cv2.boundingRect(c) #获得一个图像的最小矩形边框
        # 传入一个轮廓图像,返回 x y 是左上角的点, w和h是矩形边框的宽度和高度
        # 画出矩形, img 原图, (x, y),左上角坐标, (x + w, y + h)右下角坐标, 颜色, 线宽
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) #在img上_绘制普通矩形
        rect_contours(c,img) #在img上_绘制旋转矩形
        circle_contours(c,img)#在img上_绘制圆形
    # 画出轮廓
    # 五个输入:原始图像,轮廓(列表,以数组形式存储,记录每条轮廓所有像素点坐标(x,y),轮廓索引(当设置为-1时,绘制所有轮廓),画笔颜色,画笔大小
    cv2.drawContours(img, contours, -1, (255, 0, 0), 1)#在img上_绘制轮廓
    cv2.imshow("contours", img)
    cv2.waitKey()
    cv2.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值