python opencv3 矩形 圓形邊框


git:https://github.com/linyi0604/Computer-Vision

 

# coding:utf8

import cv2 import numpy as np # 讀入圖像
img = cv2.imread("../data/mm1.jpg", cv2.IMREAD_UNCHANGED) # 轉化為分別率更低的圖像
img = cv2.pyrDown(img) # 二值化, 黑白二值化
ret, thresh = cv2.threshold( cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY), # 轉換為灰度圖像,
    127, 255,   # 大於127的改為255 否則改為0
    cv2.THRESH_BINARY)  # 黑白二值化
""" ret, dst = cv2.threshold(src, thresh, value, type) 參數: src: 原圖像 thresh: 閾值 value: 新值 大於或小於閾值的值將賦新值 type: 方法類型,有如下取值: cv2.THRESH_BINARY 黑白二值 cv2.THRESH_BINARY_INV 黑白二值翻轉 cv2.THRESH_TRUNC 得到多像素值 cv2.THRESH_TOZERO cv2.THRESH_TOZERO_INV 返回值: ret: 得到的閾值值 dst: 閾值化后的圖像 """

# 搜索輪廓
image, contours, hierarchy = cv2.findContours( thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) """ cv.findContours() 參數: 1 要尋找輪廓的圖像 只能傳入二值圖像,不是灰度圖像 2 輪廓的檢索模式,有四種: cv2.RETR_EXTERNAL表示只檢測外輪廓 cv2.RETR_LIST檢測的輪廓不建立等級關系 cv2.RETR_CCOMP建立兩個等級的輪廓,上面的一層為外邊界, 里面的一層為內孔的邊界信息。 如果內孔內還有一個連通物體,這個物體的邊界也在頂層 cv2.RETR_TREE建立一個等級樹結構的輪廓 3 輪廓的近似辦法 cv2.CHAIN_APPROX_NONE存儲所有的輪廓點, 相鄰的兩個點的像素位置差不超過1, 即max(abs(x1-x2),abs(y2-y1))==1 cv2.CHAIN_APPROX_SIMPLE壓縮水平方向,垂直方向,對角線方向的元素, 只保留該方向的終點坐標,例如一個矩形輪廓只需4個點來保存輪廓信息 返回值: contours:一個列表,每一項都是一個輪廓, 不會存儲輪廓所有的點,只存儲能描述輪廓的點 hierarchy:一個ndarray, 元素數量和輪廓數量一樣, 每個輪廓contours[i]對應4個hierarchy元素hierarchy[i][0] ~hierarchy[i][3], 分別表示后一個輪廓、前一個輪廓、父輪廓、內嵌輪廓的索引編號,如果沒有對應項,則該值為負數 """

for c in contours: x, y, w, h = cv2.boundingRect(c) """ 傳入一個輪廓圖像,返回 x y 是左上角的點, w和h是矩形邊框的寬度和高度 """ cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2) """ 畫出矩形 img 是要畫出輪廓的原圖 (x, y) 是左上角點的坐標 (x+w, y+h) 是右下角的坐標 0,255,0)是畫線對應的rgb顏色 2 是畫出線的寬度 """

    # 獲得最小的矩形輪廓 可能帶旋轉角度
    rect = cv2.minAreaRect(c) # 計算最小區域的坐標
    box = cv2.boxPoints(rect) # 坐標規范化為整數
    box = np.int0(box) # 畫出輪廓
    cv2.drawContours(img, [box], 0, (0, 0, 255), 3) # 計算最小封閉圓形的中心和半徑
    (x, y), radius = cv2.minEnclosingCircle(c) # 轉換成整數
    center = (int(x), int(y)) radius = int(radius) # 畫出圓形
    img = cv2.circle(img, center, radius, (0, 255, 0), 2) # 畫出輪廓
cv2.drawContours(img, contours, -1, (255, 0, 0), 1) cv2.imshow("contours", img) cv2.waitKey() cv2.destroyAllWindows()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM