用python画红色三角形_使用Python中的openCV进行红色和黄色三角形检测

我正在尝试使用Python中的openCV来检测红色三角形和黄色三角形。我是一名初学者。使用Python中的openCV进行红色和黄色三角形检测

我想,一方面,检测,计数(黄色和红色),并用矩形标出相机可以看到的所有三角形。我也想找到他们的群众中心。

目前,我只是一次检测到一个单一的三角形而没有发现它的颜色。 我的质心的演算不能正常工作,给我的错误:

centroid_x = int(M['m10']/M['m00'])

ZeroDivisionError: float division by zero

我已经写了从实例灵感来自网络下面的代码

import numpy as np

import cv2

cap = cv2.VideoCapture(0)

print cap.get(3)

print cap.get(4)

# changing display size

ret = cap.set(3,320)

ret = cap.set(4,240)

def getthresholdedimg(hsv):

yellow = cv2.inRange(hsv,np.array((10,100,100)),np.array((30,255,255)))

red = cv2.inRange(hsv,np.array((0,0,0)),np.array((190,255,255)))

both = cv2.add(yellow,red)

return both

def nothing(x):

pass

# Create a black image, a window

img = np.zeros((300,512,3), np.uint8)

cv2.namedWindow('image')

while(True):

thr1 = 50

thr2 = 110

# Capture frame-by-frame

ret, frame = cap.read()

# Our operations on the frame come here

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

gaussian_blur = cv2.GaussianBlur(gray,(5,5),0)

# Our operations on the frame come here

canny = cv2.Canny(gray,thr1,thr2)

canny_blur = cv2.Canny(gaussian_blur,thr1,thr2)

# Our operations on the frame come here

contours,hier = cv2.findContours(canny,1,2)

for cnt in contours:

approx = cv2.approxPolyDP(cnt,0.02*cv2.arcLength(cnt,True),True)

if len(approx)==3:

cv2.drawContours(frame,[cnt],0,(0,255,0),2)

tri = approx

M = cv2.moments(cnt)

centroid_x = int(M['m10']/M['m00'])

centroid_y = int(M['m01']/M['m00'])

cv2.circle(img,(centroid_x,centroid_y),3,255,-1)

for vertex in tri:

cv2.circle(frame,(vertex[0][0],vertex[0][1]),3,(64,0,128),-1)

cv2.line(img,(vertex[0][0],vertex[0][1]),(centroid_x,centroid_y),(0,0,255),1)

# Display the resulting frame

cv2.imshow('normal flux',frame)

cv2.imshow('gray conversion',gray)

cv2.imshow('canny edges conversion',canny)

cv2.imshow('canny edges gaussian blur',canny_blur)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

# When everything done, release the capture

cap.release()

cv2.destroyAllWindows()

你能帮助我吗?

你可能感兴趣的:(用python画红色三角形)