C++ 两幅图像之间像素的坐标
我正在寻找一个解决方案,以方便地计算像素坐标从两个图像 问题:如果使用以下代码,我如何计算从“QVector差”更改的像素坐标?有没有可能有一个(x,y)坐标并在当前图像上找到它代表的像素C++ 两幅图像之间像素的坐标,c++,qt,pixel,C++,Qt,Pixel,我正在寻找一个解决方案,以方便地计算像素坐标从两个图像 问题:如果使用以下代码,我如何计算从“QVector差”更改的像素坐标?有没有可能有一个(x,y)坐标并在当前图像上找到它代表的像素 char *previousImage; char *currentImage; QVector difference<LONG>; for(int i = 0 ; i < CurrentImageSize; i++) { //Check if pixels are the sam
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++;
}
char*previousImage;
字符*当前图像;
矢量差;
对于(int i=0;i
编辑:
有关此主题的详细信息:
- 图像为RGB格式
- 两幅图像的宽度、高度和bpp都是已知的
- 我有一个指向表示图像的字节的指针
这里的主要目的是清楚地知道在两幅图像之间改变的像素的新值是什么,并知道它是哪个像素(其坐标)没有足够的信息来回答,但我会尝试给你一些想法 您已经声明了
char*previousImage代码>,这对我来说意味着您有一个指向表示图像的字节的指针。你需要更多的解释图像
你需要知道像素格式。你提到了RGB,所以——现在,让我们假设图像每个像素使用3个字节,顺序是RGB
您需要知道图像的宽度
给定上述2个参数,您可以计算“行跨距”,即一行占用的字节数。这通常是“每像素字节数”*“图像宽度”,但它通常被填充为可被4整除。因此,3bpp和15的宽度将是45字节+3字节的填充,以使行跨步48
考虑到这一点,如果图像数据中有一个索引,则首先将其除以行跨距,得到行(Y坐标)
X坐标是(索引mod行步长)整数除以每像素字节数
没有足够的信息来回答,但我会尽力给你一些想法
您已经声明了char*previousImage代码>,这对我来说意味着您有一个指向表示图像的字节的指针。你需要更多的解释图像
你需要知道像素格式。你提到了RGB,所以——现在,让我们假设图像每个像素使用3个字节,顺序是RGB
您需要知道图像的宽度
给定上述2个参数,您可以计算“行跨距”,即一行占用的字节数。这通常是“每像素字节数”*“图像宽度”,但它通常被填充为可被4整除。因此,3bpp和15的宽度将是45字节+3字节的填充,以使行跨步48
考虑到这一点,如果图像数据中有一个索引,则首先将其除以行跨距,得到行(Y坐标)
X坐标是(索引mod行步长)整数除以每像素字节数
据我所知,你需要计算两幅图像之间的位移或运动。例如,对于previousImage
中的每个像素I(x,y,t=previous)
,您想知道它在currentImage
中的位置,以及它的新坐标I(x,y,t=current)
如果是这样的话,那么它被称为,并测量。这方面有很多算法,它们依赖于或多或少复杂的假设,这取决于您在图像序列中观察到的对象
最简单的假设是,如果你在你观察的场景中跟随一个移动的像素I(x,y,t)
,它的亮度将随时间保持不变。换句话说,dI(x,y,t)/dt=0
由于I(x,y,t)
是三个参数(空间和时间)和两个未知数的函数,并且只有一个方程,这是一个定义不清的问题,不容易解决。许多算法增加了一个附加的假设,这样问题就可以用唯一的解决方案来解决
您可以使用现有的库来完成这项工作,其中一个非常流行的库是。据我所知,您需要计算两个图像之间发生的位移或运动。例如,对于previousImage
中的每个像素I(x,y,t=previous)
,您想知道它在currentImage
中的位置,以及它的新坐标I(x,y,t=current)
如果是这样的话,那么它被称为,并测量。这方面有很多算法,它们依赖于或多或少复杂的假设,这取决于您在图像序列中观察到的对象
最简单的假设是,如果你在你观察的场景中跟随一个移动的像素I(x,y,t)
,它的亮度将随时间保持不变。换句话说,dI(x,y,t)/dt=0
由于I(x,y,t)
是三个参数(空间和时间)和两个未知数的函数,并且只有一个方程,这是一个定义不清的问题,不容易解决。许多算法增加了一个附加的假设,这样问题就可以用唯一的解决方案来解决
您可以使用现有的库来实现这一点,其中一个非常流行的库是。假设这些字符指针是容纳像素的平面缓冲区……如果您知道图像的尺寸,您可以计算(x,y)从当前像素偏移到阵列的坐标。@melak47是的,我们可以很容易地做出这个假设,是的,我知道两幅图像的尺寸,在这种情况下是相同的。那么,如何利用当前像素的偏移量计算坐标呢?@WouterHuysentruit