我正在处理这样的视频(这些是移动的水滴):
我能够在opencv中成功地进行基本处理,以找到水滴周围的轮廓,并围绕它们画圆等。下面是在原始视频帧的反转图像上绘制的一些跟踪信息:
我想对这些运动的斑点序列做一个投影,这样我就得到了一个带有斑点运动的黑色痕迹的图像。我称之为斑点轨道。我想我使用的术语“投影”是正确的,因为如果这是一个3d堆栈,它将被称为“z投影”(只有这次的投影是通过视频中的时间/帧)。在
当我这样做的时候,我得到了一个斑点轨迹的图像,它很接近我想要的,但是里面有微小的绿色像素,我不希望在那里,因为我用黑色填充轮廓,然后合并这些填充的轮廓。我得到了这样的结论:
注意blob轨迹中的绿色小像素。它们可能看起来很微妙,但我不想让它们出现,也不知道它们为什么会在那里,因为我在代码中所做的就是在一个又一个上面印上黑色的斑点。事实上它们是绿色的,这意味着它们是我在上面绘制斑点轨迹的绿色背景图像的一部分。在
我知道我的填充是有效的,因为如果我采取一个单一的帧,而不是一个斑点轨道,我得到这个,这看起来很好:
我做投影的方式一定出了问题(通过时间添加填充轮廓)。在
单个框架的代码(工作和上面显示的)是:
cv2.drawContours(contourimage,bigbadlistofcontours[0],-1,(0,0,0),-1)
其中contourimage
是一个与我的框架大小相同的绿色图像,bigbadlistofcontours[0]是我的轮廓列表中的第一个条目,正如您所看到的,bigbadlistofcontours[0]包含两个轮廓,它们代表上面成功绘制的两个blob。在
添加/投影多个帧(不工作且内部有这些绿色小像素)的代码是:
^{pr2}$如您所见,我尝试了两种方法-一种使用drawContours,另一种使用fillPoly。两者都在blob轨迹内产生不应该存在的小像素。你知道是什么导致这些像素出现吗?在
对您的代码进行一个小的更正,然后尝试以下代码:
或者只需尝试以下操作:
^{pr2}$findContours
需要轮廓列表作为参数,即numpy数组的列表。当您传递bigbadlistofcontours[0]
时,它是两个numpy数组的列表,即两个轮廓。但是当您第二次传递xx
时,您传递了xx[0]
,这是一个numpy数组,xx[1]
是另一个numpy数组。在这种情况下,它将只在numpy数组中绘制一个点,而不是完整的轮廓。在More Details on Contours
相关问题 更多 >
编程相关推荐