如何SDL和C

| 我需要编写一个函数,将两个框架作为输入并计算它们之间的差异。 输出将是一个帧,其中每个像素的值代表目标帧和参考帧中相应像素之间的绝对差 最后,我需要以灰度显示此“残差”帧。 这里没有计算运动矢量。 我该如何开始呢? 另外,我需要创建一个显示4个图像的单一查看窗口。 http://tinypic.com/r/2r46gkm/7 有什么办法吗?     
已邀请:
假设您希望使用SDL(标记指示)来执行此操作,则需要访问帧的像素并手动对其进行迭代。您可以使用与此类似的代码来做到这一点(假设您的图像是32位表面):
Uint32 *pixelBuffer = (Uint32 *)surface->pixels;
Uint32 pixel pixelBuffer[ ( y * surface->w ) + x ];
其中x和y是您要访问的位置。您可以通过类似的方式设置像素:
Uint32 pixel = SDL_MapRGB(surface->format, r, g, b);
Uint32 *pixelBuffer = (Uint32 *)surface->pixels;
pixelBuffer[ ( y * surface->w ) + x ] = pixel;
您必须自己为每个像素实现“差异”以及标准化。 如果您不必在SDL中执行此操作,则还有其他更适合此操作的图像库,例如OpenCV或OpenIL。 问题的第二部分在SDL中确实非常简单,只需创建一个窗口(SDL_SetVideoMode),该窗口的宽度和高度是边框的两倍,然后以偏移量渲染不同的屏幕。如果您是SDL的新手,建议您仔细阅读本教程。如果没有其他参考,很好参考。 编辑: 差异...只是我认为的图像之间的差异?一些伪代码:
for each pixel at coordinate (x,y) in surface residual:
  residual(x,y) = abs(target(x,y) - reference(x,y))
为了进行归一化,只需在残差表面中找到最暗的值和最亮的值(例如,通过蛮力迭代)。我们将它们称为“ 3”和“ 4”,整个光范围称为“ 5”:
residual(x,y) = (diff(x,y) - minVal) / scale
这会将每个像素归一化为介于0和1之间的范围。您必须将其乘以您想要的最浅颜色(要确保此处不会由于整数转换而损失精度)。     

要回复问题请先登录注册