gpt4 book ai didi

python - 在Python中使用openCV检测红色和黄色三角形

转载 作者:行者123 更新时间:2023-12-02 17:13:47 25 4
gpt4 key购买 nike

我正在尝试使用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()

你能帮我吗?

最佳答案

也许你想做M = cv2.moments(tri)而不是M = cv2.moments(cnt)

关于python - 在Python中使用openCV检测红色和黄色三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com