计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~

计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~示例效果如下:

原图:

示例代码如下:

#!/usr/bin/env python3

import cv2

def sort_contours(cnts, method="left-to-right"):
    reverse = False
    i = 0
 
    if method == "right-to-left" or method == "bottom-to-top":
        reverse = True
 
    if method == "top-to-bottom" or method == "bottom-to-top":
        i = 1
 
    boundingBoxes = [cv2.boundingRect(c) for c in cnts]
    (cnts, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes),
        key=lambda b:b[1][i], reverse=reverse))
 
    return (cnts, boundingBoxes)

def draw_contour(image, c, i):
    M = cv2.moments(c)
    cX = int(M["m10"] / M["m00"])
    cY = int(M["m01"] / M["m00"])
 
    cv2.putText(image, "#{}#".format(i + 1), (cX-35, cY+10), cv2.FONT_HERSHEY_SIMPLEX,
        1.0, (0, 255, 0), 2)

    return image


image = cv2.imread("cntdemo.jpg")
cv2.imshow("Input Image", image)

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, binimg = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

_, contours, _ = cv2.findContours(binimg, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

contours = sorted(contours, key=cv2.contourArea, reverse=False)[:3]
cv2.drawContours(image, contours, -1, (0, 0, 255), 2)

(contours, boundingBoxes) = sort_contours(contours, method="left-to-right")

for (i, c) in enumerate(contours):
    draw_contour(image, c, i)

cv2.imshow("Result Image", image)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值