gpt4 book ai didi

python - 为什么我的轮廓没有被 opencv 完全填充?

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:38 26 4
gpt4 key购买 nike

我正在处理看起来像这样的视频(这些是移动的 Blob ):

enter image description here

我成功地能够在 opencv 中进行基本处理,找到 Blob 周围的轮廓,在它们周围画圆圈等。下面是在原始视频帧的倒置图像上绘制的一些跟踪信息:

enter image description here

我想对这些移动的 Blob 序列进行投影,这样我就能得到一张带有 Blob 运动黑色痕迹的图像。我称之为 Blob 轨道。我想我正确地使用了术语“投影”,因为如果这是一个 3d 堆栈,它将被称为“z 投影”(这次只有投影是通过视频中的时间/帧)。

当我这样做时,我得到了一个接近我想要的 Blob 轨迹的图像,但考虑到我正在用黑色填充轮廓然后合并,我不希望里面有微小的绿色像素这些填充轮廓。我得到这样的东西:

enter image description here

注意 blob 轨道内的绿色小像素。它们可能看起来很微妙,但我不希望它们存在,也无法弄清楚为什么它们会存在,因为我在代码中所做的只是将黑色 Blob 叠加在一起。它们是绿色的事实对我来说意味着它们是我在其上绘制 Blob 轨迹的绿色背景图像的一部分。

我知道我的填充工作正常,因为如果我拍摄单帧而不是制作 blob-track,我会得到这个,看起来不错:

enter image description here

一定是我进行投影的方式出了问题(随时间添加填充轮廓)。

单帧的代码(如上所示)是:

cv2.drawContours(contourimage,bigbadlistofcontours[0],-1,(0,0,0),-1)

contourimage 是我的框架大小的绿色图像,bigbadlistofcontours[0] 是我的轮廓列表中的第一个条目,正如您所看到的,bigbadlistofcontours[0] 包含 两个轮廓,代表两个blob,在上面成功绘制。

添加/投影多个帧的代码(不工作并且内部有这些小的绿色像素)是:

for xx in bigbadlistofcontours:
cv2.drawContours(contourimage,xx[0],-1,(0,0,0),-1)
cv2.drawContours(contourimage,xx[1],-1,(0,0,0),-1)
#cv2.fillPoly(contourimage, pts =xx[0], color=(0,0,0))
#cv2.fillPoly(contourimage, pts =xx[1], color=(0,0,0))

如您所见,我尝试使用两种方法 - 一种使用 drawContours,另一种使用 fillPoly。两者都会在 Blob 轨道内产生不应该存在的小像素。知道是什么导致这些像素在那里吗?

最佳答案

对您的代码做一个小的更正并尝试下面的代码:

for xx in bigbadlistofcontours:
cv2.drawContours(contourimage,[xx[0]],-1,(0,0,0),-1)
cv2.drawContours(contourimage,[xx[1]],-1,(0,0,0),-1)

或者只需尝试以下操作:

for xx in bigbadlistofcontours:
cv2.drawContours(contourimage,xx,-1,(0,0,0),-1)

findContours 需要一个轮廓列表作为参数,即一个 numpy 数组列表。当您传递 bigbadlistofcontours[0] 时,它是两个 numpy 数组的列表,即两个轮廓。但是当你第二次传递 xx 时,你传递了 xx[0] 这是一个 numpy 数组和 xx[1] 这是另一个 numpy大批。在这种情况下,它将只绘制该 numpy 数组中的一个点,而不是完整的轮廓。

More Details on Contours

关于python - 为什么我的轮廓没有被 opencv 完全填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21977070/

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