opencv-目标轮廓提取

import cv2 as cv
import numpy as np


if __name__=="__main__":
    img=cv.imread("D:/testimage/number.jpg")
    img = cv.imread("G:/Projects/persion reid/extract/test.jpg")
    #img1=cv.imread("D:/testimage/sample.jpg")
    #灰度化+高斯滤波
    gray_dst = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    blur_dst=cv.GaussianBlur(gray_dst,(3,3),0)
    #OTSU阈值分割
    ret,otsu_dst=cv.threshold(blur_dst,0,255,cv.THRESH_OTSU)
    cv.imshow("s", otsu_dst)
    #Canny算子提取边缘轮廓
    canny_dst=cv.Canny(otsu_dst,10,250)
    cv.imshow("s", canny_dst)
    #寻找二值图像轮廓点
    edge_points,h=cv.findContours(canny_dst,cv.RETR_EXTERNAL,
                                cv.CHAIN_APPROX_SIMPLE)
    contours=edge_points
    #轮廓的数量
    k=len(edge_points)
    src=np.zeros(gray_dst.shape,np.uint8)
    for i in range(k):
        #画出轮廓
        cv.drawContours(src,contours,i,250,2)
        #最小外包圆
        circle=cv.minEnclosingCircle(contours[i])
        cv.circle(img,(int(circle[0][0]),int(circle[0][1])),int(circle[1]),(0,255,0),2)
        #绘制多边形
        approxCurve=cv.approxPolyDP(contours[i],0.3,True)
        t=approxCurve.shape[0]
        for i in range(t-1):
            cv.line(img,(approxCurve[i,0,0],approxCurve[i,0,1]),
                    (approxCurve[i+1,0,0],approxCurve[i+1,0,1]),(255,0,0),2)
            cv.line(img, (approxCurve[t-1, 0, 0], approxCurve[t-1, 0, 1]),
                    (approxCurve[0, 0, 0], approxCurve[0, 0, 1]),(255,0,0),2)
    cv.imshow("1",src)
    cv.imshow("2",img)
    cv.imwrite("G:/Projects/persion reid/extract/test-1.jpg", src)
    cv.imwrite("G:/Projects/persion reid/extract/test-2.jpg", img)
    cv.waitKey(0)
    cv.destroyAllWindows()





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值