如何修改此Python OpenCV程序以从阈值图像获取xy坐标

0 投票
1 回答
1682 浏览
提问于 2025-04-17 22:41

我有一个用opencv写的程序,可以追踪一个蓝色物体。

有人能帮我修改一下,让它在把摄像头拍到的画面转成二进制图像后,找到这个物体的中心吗?

附注:我希望这个程序能在摄像头上运行,而不是在静态图片上。

import numpy as np
import cv2
cap = cv2.VideoCapture(1)
while(True):
ret, frame = cap.read()  
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
mask = cv2.inRange(gray, lower_blue, upper_blue)
res = cv2.bitwise_and(frame,frame, mask= mask)
# Display the resulting frame
cv2.imshow('frame',gray)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

我想找到从摄像头的二进制图像中白色区域的中心,也就是它的xy坐标。

我有一段代码,可以用来找到二进制图像的xy坐标。

我想把它修改成可以处理摄像头实时视频的版本。

这里是用来找到二进制图像坐标的代码。

for y in xrange(img.size[1]):
for x in xrange(img.size[0]):
if pixels[x, y] == 0:
xlist.append(x)
ylist.append(y)
xleft = min(xlist)
xright = max(xlist)
ytop = min(ylist)
ybot = max(ylist)
xax = (xleft+xright)/2
yax = (ytop+ybot)/2

有没有人能把这两段代码合并一下,让它能在摄像头的实时画面上工作?

1 个回答

0

你想在进行位与运算(bitwise_and)之后找到轮廓,可以使用findContours这个功能,然后通过获取轮廓的边界矩形(boundingRect)或者轮廓的矩(moments)来找到它的x和y坐标。

另外,别再想着“找到二值图像的坐标”这个主意了。(不,你需要重新发明“连通组件”这个概念。直接使用内置的功能就可以了。)

撰写回答