我正在寻找一种能够轻松计算两幅图像的像素坐标的解决方案。
问题:如果您使用以下代码,我如何计算从" QVector差异"更改的像素坐标? ?是否可以使用(x,y)坐标并在currentImage上找到它代表的像素?
char *previousImage;
char *currentImage;
QVector difference<LONG>;
for(int i = 0 ; i < CurrentImageSize; i++)
{
//Check if pixels are the same (we can also do it with RGB values, this is just for the example)
if(previousImagePixel != currentImagePixel)
{
difference.push_back(currentImage - previousImage);
}
currentImage++;
}
修改 有关此主题的更多信息:
这里的主要目标是清楚地知道在两个图像之间发生变化的像素的新值是什么,并知道它是哪个像素(它的坐标)
答案 0 :(得分:1)
没有足够的信息可以回答,但我会尝试给你一些想法。
你已声明char *previousImage;
,这对我来说意味着你有一个指向代表图像的字节的指针。你需要的不仅仅是解释图像。
答案 1 :(得分:1)
根据我的理解,您需要计算两个图像之间发生的位移或运动。例如。对于I(x, y, t=previous)
中的每个像素previousImage
,您想知道它在currentImage
中的位置,以及他的新坐标I(x, y, t=current)
。
如果是这种情况,那么它会调用motion estimation并测量optical flow。根据您在图像序列中观察到的对象,有许多算法依赖于或多或少复杂的假设。
最简单的假设是,如果您在观察的场景中跟随移动像素I(x, y, t)
,其亮度将随时间保持不变。换句话说,dI(x,y,t) / dt = 0
。
由于I(x, y, t)
是具有两个未知数的三个参数(空间和时间)的函数,并且只有一个方程,这是一个定义不明确的问题,没有简单的解决方案。许多算法都增加了一个额外的假设,因此可以通过一个独特的解决方案解决问题。
你可以使用现有的库来为你做这件事,其中一个非常受欢迎的是openCV。