我开始编写一个鼠标轨道脚本作为一个挑战,它将以任何分辨率记录,然后将其全部转换为单个分辨率并输出图像。
我让它在基本水平上工作,所以它相当于只是伸展一切。例如,如果您增加宽度并减小输出的高度,您仍然可以看到单个像素的位置,它们只是非常宽并且被压扁。
我想知道是否有人知道我是如何实际重新采样像素的,特别是对于奇数分辨率,所以它会产生较少的块状结果?由于显示器通常都是非常标准的分辨率,它并不是一个大问题,但它让我感到恼火,我已经尝试过并且无法使它工作。
我尝试获取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 = white
到latest = black
的线性比例。 Here's an example一天或两个窗口使用和游戏:
编辑:我尝试过RuDevel的颜色建议(它没有解决问题,但我认为这是一个很酷的主意),因为当互联网一次下降几个小时时,它有点无聊。图片中的曲目较少,因为我还添加了一点压缩旧值,因此需要启动新文件。
并没有达到预期效果,但作为一个基点,我试图绕过彩虹色:
答案 0 :(得分:1)
您可以使用随时间变换颜色的铅笔(例如彩虹式)来追踪您的动作。
通过这种方式,您可以比黑线更长时间跟踪它们。 但是,我仍然希望你不得不时不时地开始新的跟踪图像,因此随着时间的推移不断增加空间要求。
但是,如果您随后将一次仅转换为,则将结果写入最终输出并立即删除它,您需要(几乎)没有额外的空间用于最终转换
另一个想法是通过注意位置,方向和速度来压缩在重要点处提取的样条线。这应该会大大减少空间需求 - 但是定义如何检测这样一个重要点可能很难。
一种方法可能是将区域(例如5x5 grid
的中心区域)定义为“质心”。当一段通过该中心或(对于外线)在距离中心最近的点处时,将记录一次。但是,您需要定义某种类型的“物理”来重现(与之类似)原始图像。
如上所述上采样,您的图片的子像素也可以正常工作,但您的图片类型 - 很可能(由它的本质) - 很少留下明显的复制的边缘方向。