C++ 图像的逐行像素检查

C++ 图像的逐行像素检查,c++,image-processing,computer-vision,C++,Image Processing,Computer Vision,我拍摄了一段视频的两个连续帧的差值。我得到的(如你所知)是一个黑色的框架,除了移动的物体。移动的对象是白色的。我想计算帧中白色像素的数量。我的意思是,我想逐行检查图像,如果第I个像素的值大于指定的数字(比如50),那么它们必须存储在一个数组中。稍后,我将使用这个数组来检查是否确实存在一个对象或只是一个噪声。例如,如果一辆车在视频中移动,那么在帧差分之后,我将逐行检查包含该车的帧的每个像素,以检测该车。因此,当视频中有移动的汽车时,帧差分后像素值大于0。你知道我如何计算移动中汽车的所有像素,从而判

我拍摄了一段视频的两个连续帧的差值。我得到的(如你所知)是一个黑色的框架,除了移动的物体。移动的对象是白色的。我想计算帧中白色像素的数量。我的意思是,我想逐行检查图像,如果第I个像素的值大于指定的数字(比如50),那么它们必须存储在一个数组中。稍后,我将使用这个数组来检查是否确实存在一个对象或只是一个噪声。例如,如果一辆车在视频中移动,那么在帧差分之后,我将逐行检查包含该车的帧的每个像素,以检测该车。因此,当视频中有移动的汽车时,帧差分后像素值大于0。你知道我如何计算移动中汽车的所有像素,从而判断它是一辆汽车还是一种噪音吗。
提前感谢:)

您可以使用blob检测: 在每个“差异图像”中检测一团白色像素。一旦你有了这些斑点,你可以通过找到它们的像素位置的平均值来找到它们的中心。然后,您可以找到这些中心扫出的路径,并根据某些标准进行检查

在不了解更多图像的情况下,我无法提出一个标准,但例如,如果你看着它们沿着直线移动,你可能会认为所有的点大致是共线的。在这种情况下,您可以获得梯度和一个点,其中发现一个水滴,并使用直线的点梯度形式来获得直线方程:

y - y_1 = m(x - x_1)
例如,给定一个点(4,2)和梯度3,你会得到

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

然后,您可以对照这条线检查所有点,看看它们是否位于这条线上。

您可能会发现差异并非微不足道。例如,您可能会发现最大的差异是在汽车边缘附近,垂直于汽车的运动。这两条边中的一条将具有负值,另一条为正值。因此,“差异图像”的最大优势在于限制搜索区域。孤立地说,它不是很有用


那么,你应该怎么做?好的,在正常图像上使用边缘检测算法,并将在那里发现的边缘与差分图像中发现的两条边缘进行比较。属于汽车的边缘将连接差异图像的两个边缘。

计算机视觉问题通常从嵌入的示例图像中受益匪浅。