gpt4 book ai didi

python - OpenCV 试图分割轮廓或在一个轮廓中找到两个最底部的点

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:50 24 4
gpt4 key购买 nike

我正在玩 openCV(在 Python 上)并尝试完成一项简单的任务。我有这个人体轮廓,我需要在他的每一半上找到最底部的点(所以,基本上,腿的最底部点。我在图像上突出显示了它们),我只是不知道如何做到这一点。

有什么方法可以将轮廓分成两半?或者有更简单的方法吗?

contour

谢谢!

最佳答案

首先,您想反转图像上的颜色 - 然后处理该反转图像。您可以执行描述的操作 here实现这一目标。

我刚刚写了一些代码,似乎成功地检测了倒置图像上每条腿的底部。简而言之,我所做的是访问轮廓数组中的每个元素并找到最大(出于某种原因)y 值。从那里,很容易获得关联的 x 值并在这些坐标处绘制圆圈。您可以调整阈值、平滑度等,直到画出圆圈。注意:需要指定倒像的路径。这是执行此操作的代码(它确实杂乱无章,我只是将它们拼凑在一起 AQAP 这样您就可以开始了):

class test():
def __init__(self):
cv2.namedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
cv2.createTrackbar('Threshold', 'w1', 100, 225, self.passdef)
cv2.createTrackbar('Smoothen', 'w1', 15, 24, self.passdef)
cv2.createTrackbar('Brightness', 'w1', 50, 100, self.passdef)
cv2.createTrackbar('Contrast', 'w1', 0, 100, self.passdef)

self.vid_contour_selection()


def passdef(self, x):
pass

def vid_contour_selection(self):


while True:

self.t1 = cv2.getTrackbarPos('Threshold', 'w1')
self.gb1 = cv2.getTrackbarPos('Smoothen', 'w1')
bright = cv2.getTrackbarPos('Brightness', 'w1')
contrast = cv2.getTrackbarPos('Contrast', 'w1')
c = float(contrast)/100
b = float(bright)/100

im = cv2.imread('/home/rm/invertida.png')
aframe = numpy.asarray(im[:,:])

g = cv.fromarray(aframe)

if self.gb1 != 0:
cv.Smooth(g, g ,cv.CV_GAUSSIAN, self.gb1,15 )
g = numpy.asarray(g)

imgray = cv2.cvtColor(g,cv2.COLOR_BGR2GRAY)

ret,thresh = cv2.threshold(imgray,self.t1,225, cv2.THRESH_BINARY) #mouseover colony to see val
threshbgr = cv2.cvtColor(thresh, cv.CV_GRAY2BGR)
contours, hierarchy = cv2.findContours(thresh,cv.CV_RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) #or CV_RETR_LIST

self.ctrs = []

for i in contours:


if cv2.contourArea(i) < 150000 and cv2.contourArea(i) >500:
self.ctrs.append(i)


ally = []


for i in self.ctrs:

for q in i:

for p in q:

ally.append(p[1])

ally.sort()

miny = ally[-1]
miny2 = miny
count = -2
while miny2 == miny:
miny2 = ally[count]
count -=1


for i in self.ctrs:

for q in i:


for p in q:
if p[1] == miny:
corda = (p[0], miny)
if p[1] == miny2:
cordb = (p[0], miny2)


cv2.circle(threshbgr, corda,20,color= (0,0,225),thickness= 2)
cv2.circle(threshbgr, cordb,20,color= (0,0,225),thickness= 2)




cv2.drawContours(threshbgr,self.ctrs,-1,(0,225,0),2)

cv2.imshow("w1", threshbgr)
c = cv2.waitKey(5)


p = test()

为格式设置道歉 - 您必须缩进 class test() 下的所有内容。

关于python - OpenCV 试图分割轮廓或在一个轮廓中找到两个最底部的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409493/

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