Python實現(xiàn)圖片查找輪廓、多邊形擬合、最小外接矩形代碼
更新時間:2020年07月14日 08:43:39 作者:南洲.
這篇文章主要介紹了Python實現(xiàn)圖片查找輪廓、多邊形擬合、最小外接矩形代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
1、概述
經常用到輪廓查找和多邊形擬合等opencv操作,因此記錄以備后續(xù)使用。本文代碼中的閾值條件對圖片沒有實際意義,僅僅是為了測試。
原圖為:

2、測試代碼:
import cv2
import numpy as np
img = cv2.imread('/home/yasin/coffe.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, contours, hierarchy = cv2.findContours(img_gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (255, 0, 255), 1)
cv2.namedWindow('Result of drawContours', 0)
cv2.imshow('Result of drawContours', img)
cv2.waitKey()
cnt = 0
for i in range(len(contours)):
arclen = cv2.arcLength(contours[i], True)
epsilon = max(3, int(arclen * 0.02)) # 擬合出的多邊形與原輪廓最大距離,可以自己設置,這里根據(jù)輪廓周長動態(tài)設置
approx = cv2.approxPolyDP(contours[i], epsilon, False) # 輪廓的多邊形擬合
area = cv2.contourArea(contours[i]) # 計算面積
rect = cv2.minAreaRect(contours[i])
box = np.int0(cv2.boxPoints(rect)) # 計算最小外接矩形頂點
h = int(rect[1][0])
w = int(rect[1][1])
if min(h, w) == 0:
ration = 0
else:
ration = max(h,w) /min(h,w) # 長寬比
# 對長寬比,輪廓面積,擬合出的多邊形頂點數(shù)做篩選
if ration < 10 and area > 20 and area < 4000 and approx.shape[0] > 3 :
# 對滿足條件的輪廓畫出輪廓的擬合多邊形
cv2.polylines(img, [approx], True, (0, 255, 0), 1)
cv2.namedWindow('Result of filtered', 0)
cv2.imshow('Result of filtered', img)
cv2.waitKey()
畫出的所有輪廓:

在原輪廓基礎上畫出篩選后的輪廓(綠色部分,沒有實際意義):

補充知識:OpenCV python 輪廓(連通域)最小外接圓形
原圖:[cc.jpg]

import cv2
import numpy as np
def main():
# 1.導入圖片
img_src = cv2.imread("cc.jpg")
# 2.灰度化,二值化
img_gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)
ret, img_bin = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
# 3.連通域分析
img_bin, contours, hierarchy = cv2.findContours(img_bin,
cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
# 4.獲取最小外接圓 圓心 半徑
center, radius = cv2.minEnclosingCircle(contours[0])
center = np.int0(center)
# 5.繪制最小外接圓
img_result = img_src.copy()
cv2.circle(img_result, tuple(center), int(radius), (255, 255, 255), 2)
# 6.顯示結果圖片
cv2.imshow("img_src", img_src)
cv2.imshow("img_result", img_result)
cv2.waitKey()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
處理結果:[img_sult.jpg]

以上這篇Python實現(xiàn)圖片查找輪廓、多邊形擬合、最小外接矩形代碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
安裝不同版本的tensorflow與models方法實現(xiàn)
這篇文章主要介紹了安裝不同版本的tensorflow與models方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02
Python從入門到精通之條件語句和循環(huán)結構詳解
Python中提供了強大而靈活的條件語句和循環(huán)結構,本文將從入門到精通地介紹它們的使用方法,并通過相關代碼進行講解,希望對大家深入了解Python有一定的幫助2023-07-07
關于ZeroMQ 三種模式python3實現(xiàn)方式
今天小編就為大家分享一篇關于ZeroMQ 三種模式python3實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12

