逐行像素检查图像

时间:2012-05-10 23:42:36

标签: c++ image-processing computer-vision

我拍摄了视频的两个连续帧的差异。我得到的(如你所知)除移动物体外的黑框。移动的物体是白色的。我想计算帧中的白色像素数。我的意思是,我想逐行浏览图像,如果第i个像素的值大于指定的数字(比如说50),那么它们必须存储在一个数组中。稍后,我将使用此数组来检查是否存在实际对象或仅有噪声。例如,如果汽车正在视频中移动,那么在帧差分之后,我将检查包含汽车的每个帧的每个像素,以检测该汽车。结果,当视频中存在移动的汽车时,在帧差分之后像素的值大于0。任何想法如何总结动车的所有像素,使我能够决定它是汽车还是只是噪音。 在此先感谢:)

2 个答案:

答案 0 :(得分:0)

您可以使用blob检测:http://www.labbookpages.co.uk/software/imgProc/blobDetection.html 检测每个“差异图像”中的一串白色像素。一旦你有blob,你可以通过找到他们的像素位置的平均值找到他们的中心。然后你可以找到这些中心扫过的路径,并根据一些标准进行检查。

在不了解您的图像的情况下,我无法提出一个标准,但是例如,如果您正在观察它们沿着直线道路移动,您可能会期望所有点都是大致共线的。在这种情况下,您可以获得渐变和找到斑点的点,并使用线的点渐变形式来获得线方程:

y - y_1 = m(x - x_1)

例如,给定一个点(4,2)和渐变3,你会得到

y - 2 = 3(x - 4)
y = 3x - 2

然后,您可以检查此行的所有点,看看它们是否位于此行。

答案 1 :(得分:0)

你可能会发现这种差别并不重要。例如,您可能会发现最大的区别是靠近汽车的边缘,垂直于汽车的运动。这两个边缘中的一个将具有负值,一个为正。因此,“差异图像”的最大优点是您限制了搜索区域。孤立地说它不是很有用。

那么,你应该怎么做?好吧,在普通图像上使用边缘检测算法,并将其中找到的边缘与差异图像中找到的2个边缘进行比较。属于汽车的边缘将连接差异图像的2个边缘。