1. 程式人生 > >Opencv--20行程式碼實現橢圓檢測

Opencv--20行程式碼實現橢圓檢測

本文環境:opencv+python3.4
之前在實驗室看到了8000行的橢圓檢測,
然後就手癢了。。。
當然,人家的研究成果很牛叉,
我的只算是沒事瞎Happy
各位客官就看著玩吧。
程式碼中有兩處引數可以更改。
準確率一般。
import cv2
import numpy as np
from matplotlib import pyplot as plt
import math
img=cv2.imread("test.jpg",3)
#img=cv2.blur(img,(1,1))
imgray=cv2.Canny(img,600,100,3)#Canny邊緣檢測,引數可更改
#cv2.imshow("0",imgray)
ret,thresh = cv2.threshold(imgray,127,255,cv2.THRESH_BINARY)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)#contours為輪廓集,可以計算輪廓的長度、面積等
for cnt in contours:
    if len(cnt)>50:
        S1=cv2.contourArea(cnt)
        ell=cv2.fitEllipse(cnt)
        S2 =math.pi*ell[1][0]*ell[1][1]
        if (S1/S2)>0.2 :#面積比例,可以更改,根據資料集。。。
            img = cv2.ellipse(img, ell, (0, 255, 0), 2)
            print(str(S1) + "    " + str(S2)+"   "+str(ell[0][0])+"   "+str(ell[0][1]))
cv2.imshow("0",img)
cv2.waitKey(0)