首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用SDL和C++

如何使用SDL和C++
EN

Stack Overflow用户
提问于 2011-05-23 16:13:36
回答 1查看 599关注 0票数 0

我需要编写一个函数,它接受两个帧作为输入,并计算它们之间的差异。输出将是一个帧,其中每个像素的值表示目标帧和参考帧中相应像素之间的绝对差

最后,我需要以灰度显示这个“残差”帧。此处不计算任何运动矢量。

我该如何开始做这件事?

此外,我需要创建一个单一的观察窗口,将显示4个图像。

http://tinypic.com/r/2r46gkm/7

有什么解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-23 16:45:03

假设您希望使用SDL (您的标记指示)来完成此操作,您将希望访问帧的像素并手动迭代它们。您可以使用类似于此的代码来完成此操作(假设您的图像是32位曲面):

代码语言:javascript
代码运行次数:0
运行
复制
Uint32 *pixelBuffer = (Uint32 *)surface->pixels;
Uint32 pixel pixelBuffer[ ( y * surface->w ) + x ];

其中x和y是您要访问的位置。您可以用类似的方式设置像素:

代码语言:javascript
代码运行次数:0
运行
复制
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的新手,我建议您使用this tutorial。如果没有其他东西,这是一个很好的参考。

编辑:差异...只是图像之间的区别吗?一些伪代码:

代码语言:javascript
代码运行次数:0
运行
复制
for each pixel at coordinate (x,y) in surface residual:
  residual(x,y) = abs(target(x,y) - reference(x,y))

对于归一化,只需在残差曲面中找到最暗和最亮的值(例如,通过暴力迭代)。我们将它们称为minValmaxVal,并将整个光线范围称为scale = maxVal - minVal

代码语言:javascript
代码运行次数:0
运行
复制
residual(x,y) = (diff(x,y) - minVal) / scale

这会将每个像素归一化到0到1的范围内。你必须将它乘以你想要的最亮的颜色(确保不会因为这里的整数转换而失去精度)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6094518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档