2017-02-26 52 views
0

我开始编写一个鼠标跟踪脚本作为一个挑战,它将以任何分辨率记录,然后将其全部转换为单个分辨率并输出图像。如何重新采样像素到另一个分辨率?

我有一个基本的工作,所以它是相当于只是伸展一切。例如,如果增加宽度并减小输出的高度,您仍然可以看到各个像素的位置,它们只是很宽而且很挤。

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

我试图获得了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

enter image description here

编辑:一天或三三两两价值的Windows使用的和游戏的Here's an example我试图通过RuDevel颜色的建议(它没有解决的问题,但我认为这是一个很酷的想法),因为当互联网一次下载好几个小时时,它有点无聊。图片上的轨迹较少,因为我还添加了一些压缩旧值的位置,因此需要启动一个新文件。

并没有变成相当以及预期,但作为基点,我在彩虹的颜色试图周期:

enter image description here

并与他们相反: enter image description here

+0

您可以从子像素(采样)一直到样条线。使用矢量化版本的动作,您可以在理论上重现任何分辨率。 – RuDevel

+0

这是一个非常好的想法,但它听起来像是难以限制文件大小。在60fps的情况下,每天约有1000万分,除非我错过了一些东西,否则不会有简单的方法去除隐藏点:P – Peter

回答

1

你也许可以使用随时间推移颜色的铅笔来追踪你的动作(例如彩虹风格)。

这样你就能比黑线更长的时间跟踪它们。然而,我仍然希望你不得不不时地开始一个新的跟踪图像,因此随着时间的推移不断增长的空间要求。

但是,如果您随后将仅在一个时间段中的一个段转换为样条线,则会将结果写入最终输出并立即将其删除,因此最终转换需要(几乎)没有额外空间。

另一个想法是压缩显著点在飞行所提取的花键通过注意位置,方向和速度。这应该大大降低空间需求 - 但是如何确定如何检测这样一个重要的点可能会很困难。

其中一种方法可能是将一个区域(例如5x5 grid的中心区域)定义为类似'质心'的东西。当它通过该中心或在最靠近中心点的位置(对于外线)时,将会注意到一次。然而,您需要定义某种类型的“物理”以重现(与某些东西相媲美)原始图像。

如前所述采样的图像的子像素应该工作一样好,但你的形象会型 - 最有可能(由它的本质) - 离开再现极少数不同的边缘方向。

+0

感谢您的建议,颜色是一个很酷的想法,我会尝试找出公式来将选择的颜色映射到一个范围(我猜目前它只是白色到黑色)。你能否澄清你的意思吗?一次将一段转换为样条,然后写下去?我从你的原始评论中获得了存储点开始时间点(允许多个分辨率)的原始意见,然后以4k分辨率向后绘制或者删除完全被其他像素隐藏的线,但是我又一次意识到空间需求将是巨大的哈哈。 – Peter

+0

随着网格的想法,就线条通过边缘的位置而言,我最初认为这将是一个好主意,但后来我意识到,只是说你将1080缩放到4k,就会有一个非常明显的像素网格,没有像素,像素等等。虽然哈哈,但我不太了解大众想法的中心。 – Peter

+0

当我尝试编辑评论哈哈时,网络投放在我身上。我想说我已经加入了一点,以压缩旧值,并阻止计数器变得太高,这对保持可读性应该有很大的帮助。这不是可以快速测试的东西,所以我会在接下来的几天内使用这些值:) – Peter