如何将像素重新取样为另一种分辨率?

时间:2017-02-26 00:17:32

标签: python

我开始编写一个鼠标轨道脚本作为一个挑战,它将以任何分辨率记录,然后将其全部转换为单个分辨率并输出图像。

我让它在基本水平上工作,所以它相当于只是伸展一切。例如,如果您增加宽度并减小输出的高度,您仍然可以看到单个像素的位置,它们只是非常宽并且被压扁。

我想知道是否有人知道我是如何实际重新采样像素的,特别是对于奇数分辨率,所以它会产生较少的块状结果?由于显示器通常都是非常标准的分辨率,它并不是一个大问题,但它让我感到恼火,我已经尝试过并且无法使它工作。

我尝试获取width/height_multiply的剩余部分,并将value * remainder添加到外部像素,作为使它们模糊的一种方式,如果它是一个奇怪的比例,但它产生了非常奇怪的结果接近我想要的。

这里我的当前代码编辑了一点:

required_res = (3840, 2160)
data = {(1920, 1080: {(0, 2): 52, (1, 2): 549, (6, 3): 125}}

for resolution, coordinates in data.iteritems():

    width_multiply = required_res[0] / resolution[0]
    height_multiply = required_res[1] / resolution[1]

    for coordinate, value in coordinates.iteritems():

        #Figure out new coordinate
        base_coordinate = (int(round(coordinate[0] * width_multiply)),
                           int(round(coordinate[1] * height_multiply)))
        coordinate_list = {base_coordinate: value}


        #Increase pixel size if image is bigger
        if width_multiply_int and height_multiply_int:
            for x in range(-int(width_multiply), int(width_multiply)):
                for y in range(-int(height_multiply), int(height_multiply)):

                    new_coordinate = (base_coordinate[0] + x,
                                      base_coordinate[1] + y)
                    coordinate_list[new_coordinate] = value

        #repeat above bit for "just x" and "just y", it's basically the same


        for c in coordinate_list:
            try:
                new_data[c] = max(new_data[c], value)
            except KeyError:
                new_data[c] = value

该值恰好是屏幕不会完全变黑的。每个新点基本上都会获得更高的数字,并且它目前是从0 = whitelatest = black的线性比例。 Here's an example一天或两个窗口使用和游戏:

enter image description here

编辑:我尝试过RuDevel的颜色建议(它没有解决问题,但我认为这是一个很酷的主意),因为当互联网一次下降几个小时时,它有点无聊。图片中的曲目较少,因为我还添加了一点压缩旧值,因此需要启动新文件。

并没有达到预期效果,但作为一个基点,我试图绕过彩虹色:

enter image description here

与他们相反: enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用随时间变换颜色的铅笔(例如彩虹式)来追踪您的动作。

通过这种方式,您可以比黑线更长时间跟踪它们。 但是,我仍然希望你不得不时不时地开始新的跟踪图像,因此随着时间的推移不断增加空间要求。

但是,如果您随后将一次仅转换为,则将结果写入最终输出并立即删除它,您需要(几乎)没有额外的空间用于最终转换

另一个想法是通过注意位置,方向和速度压缩重要点处提取的样条线。这应该会大大减少空间需求 - 但是定义如何检测这样一个重要点可能很难。

一种方法可能是将区域(例如5x5 grid的中心区域)定义为“质心”。当一段通过该中心或(对于外线)在距离中心最近的点处时,将记录一次。但是,您需要定义某种类型的“物理”来重现(与之类似)原始图像。

如上所述上采样,您的图片的子像素也可以正常工作,但您的图片类型 - 很可能(由它的本质) - 很少留下明显的复制的边缘方向。