1. 程式人生 > 程式設計 >Python實現圖片查詢輪廓、多邊形擬合、最小外接矩形程式碼

Python實現圖片查詢輪廓、多邊形擬合、最小外接矩形程式碼

1、概述

經常用到輪廓查詢和多邊形擬合等opencv操作,因此記錄以備後續使用。本文程式碼中的閾值條件對圖片沒有實際意義,僅僅是為了測試。

原圖為:

Python實現圖片查詢輪廓、多邊形擬合、最小外接矩形程式碼

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,-1,(255,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)) # 擬合出的多邊形與原輪廓最大距離,可以自己設定,這裡根據輪廓周長動態設定
 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) # 長寬比

 # 對長寬比,輪廓面積,擬合出的多邊形頂點數做篩選
 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()

畫出的所有輪廓:

Python實現圖片查詢輪廓、多邊形擬合、最小外接矩形程式碼

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

Python實現圖片查詢輪廓、多邊形擬合、最小外接矩形程式碼

補充知識:OpenCV python 輪廓(連通域)最小外接圓形

原圖:[cc.jpg]

Python實現圖片查詢輪廓、多邊形擬合、最小外接矩形程式碼

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,cv2.THRESH_BINARY)

  # 3.連通域分析
  img_bin,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),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實現圖片查詢輪廓、多邊形擬合、最小外接矩形程式碼

以上這篇Python實現圖片查詢輪廓、多邊形擬合、最小外接矩形程式碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。