如何通过命令行重新定向(shift/offset)球形(360 度)图像,例如Imagemagick 还是 GIMP?
How to reorient (shift/offset) spherical (360-deg) images via command line with e.g. Imagemagick or The GIMP?
我正在安装 spherical/360-degree cameras 的远程网络,并且需要让它们生成的图像全部与某物(北)对齐。问题是,相机最终可能会面向任何随机方向安装,因此我需要 shift/offset(水平)图像,并将图像边界外的任何内容包裹到另一侧。
在安装每个摄像头后拍摄样本图像后,我将知道偏移图像的正确像素值,并且能够在每个摄像头的基础上指定偏移值。
this article 的前半部分解释了如何在 Photoshop 中执行此操作(滤镜菜单 > 其他 > 偏移,指定偏移像素值,然后启用“环绕”选项)。 Photoshop 将图像偏移定义的像素数,任何多余的部分都会自动移动到图像的另一侧以填充因移动图像而产生的空隙。
我只需要自动偏移图像并将多余的部分环绕到图像的另一侧,这样图像的任何部分都不会丢失,Linux(Raspbian) 环境,通过命令行。我无法使用 GUI 来执行此操作,因为我们长期谈论的是数百万张图像。
我尝试使用 Imagemagick 的几何偏移工具 (convert -geometry +0+100 R0011996.JPG
) 执行此操作,但是 a) 我无法弄清楚如何实际使用它,并且 b) 似乎没有像这样的选项Photoshop 中的“环绕”选项。
我刚刚意识到 GIMP 有 an equivalent tool and a command-line interface 并试过了,但找不到任何像样的文档。我找到了程序浏览器,它说要使用“gimp-drawable-offset”。我尝试了以下方法,但失败了:
gimp -i -b '(gimp-drawable-offset "R0011996.JPG" 1 2 300 0)' -b '(set! drawable (car (gimp-image-get-active-layer image)))' -b '(gimp-quit 0)'
batch command experienced an execution error: Error: Invalid type for
argument 1 to gimp-drawable-offset
batch command experienced an execution error: Error: eval: unbound
variable: image
和
gimp -i -b '(gimp-drawable-offset 1 2 300 0)' -b '(set! drawable (car (gimp-image-get-active-layer "R0011996.JPG")))' -b '(gimp-quit 0)'
batch command experienced an execution error: Error: Invalid number of
arguments for gimp-drawable-offset (expected 5 but received 4)
batch command experienced an execution error: Error: Invalid type for
argument 1 to gimp-image-get-active-layer
和...
gimp -i -b '(gimp-drawable-offset "R0011996.JPG" TRUE 2 300 0)' -b '(set! drawable (car (gimp-image-get-active-layer image)))' -b '(gimp-quit 0)'
batch command experienced an execution error: Error: Invalid type for
argument 1 to gimp-drawable-offset
batch command experienced an execution error: Error: eval: unbound
variable: image
...和...
gimp -i -b '(gimp-drawable-offset "R0011996.JPG" TRUE 2 300 0)' -b '(set! drawable (car (gimp-image-get-active-layer "R0011996.JPG")))' -b '(gimp-quit 0)'
batch command experienced an execution error: Error: Invalid type for
argument 1 to gimp-drawable-offset
batch command experienced an execution error: Error: Invalid type for
argument 1 to gimp-image-get-active-layer
关于如何实现这一点有什么建议吗?
提前致谢。
感谢 Xenoid,他在评论中做出了回答。解决方法很简单:
convert input.jpg -roll +400+0 output.jpg
其中 400 是以像素为单位的 x 偏移,0 是以像素为单位的 y 偏移(如果需要,您也可以使用负值来反转偏移的方向)。
请参阅“像坏电视一样滚动图像”部分here。
我正在安装 spherical/360-degree cameras 的远程网络,并且需要让它们生成的图像全部与某物(北)对齐。问题是,相机最终可能会面向任何随机方向安装,因此我需要 shift/offset(水平)图像,并将图像边界外的任何内容包裹到另一侧。
在安装每个摄像头后拍摄样本图像后,我将知道偏移图像的正确像素值,并且能够在每个摄像头的基础上指定偏移值。
this article 的前半部分解释了如何在 Photoshop 中执行此操作(滤镜菜单 > 其他 > 偏移,指定偏移像素值,然后启用“环绕”选项)。 Photoshop 将图像偏移定义的像素数,任何多余的部分都会自动移动到图像的另一侧以填充因移动图像而产生的空隙。
我只需要自动偏移图像并将多余的部分环绕到图像的另一侧,这样图像的任何部分都不会丢失,Linux(Raspbian) 环境,通过命令行。我无法使用 GUI 来执行此操作,因为我们长期谈论的是数百万张图像。
我尝试使用 Imagemagick 的几何偏移工具 (convert -geometry +0+100 R0011996.JPG
) 执行此操作,但是 a) 我无法弄清楚如何实际使用它,并且 b) 似乎没有像这样的选项Photoshop 中的“环绕”选项。
我刚刚意识到 GIMP 有 an equivalent tool and a command-line interface 并试过了,但找不到任何像样的文档。我找到了程序浏览器,它说要使用“gimp-drawable-offset”。我尝试了以下方法,但失败了:
gimp -i -b '(gimp-drawable-offset "R0011996.JPG" 1 2 300 0)' -b '(set! drawable (car (gimp-image-get-active-layer image)))' -b '(gimp-quit 0)'
batch command experienced an execution error: Error: Invalid type for argument 1 to gimp-drawable-offset
batch command experienced an execution error: Error: eval: unbound variable: image
和
gimp -i -b '(gimp-drawable-offset 1 2 300 0)' -b '(set! drawable (car (gimp-image-get-active-layer "R0011996.JPG")))' -b '(gimp-quit 0)'
batch command experienced an execution error: Error: Invalid number of arguments for gimp-drawable-offset (expected 5 but received 4)
batch command experienced an execution error: Error: Invalid type for argument 1 to gimp-image-get-active-layer
和...
gimp -i -b '(gimp-drawable-offset "R0011996.JPG" TRUE 2 300 0)' -b '(set! drawable (car (gimp-image-get-active-layer image)))' -b '(gimp-quit 0)'
batch command experienced an execution error: Error: Invalid type for argument 1 to gimp-drawable-offset
batch command experienced an execution error: Error: eval: unbound variable: image
...和...
gimp -i -b '(gimp-drawable-offset "R0011996.JPG" TRUE 2 300 0)' -b '(set! drawable (car (gimp-image-get-active-layer "R0011996.JPG")))' -b '(gimp-quit 0)'
batch command experienced an execution error: Error: Invalid type for argument 1 to gimp-drawable-offset
batch command experienced an execution error: Error: Invalid type for argument 1 to gimp-image-get-active-layer
关于如何实现这一点有什么建议吗?
提前致谢。
感谢 Xenoid,他在评论中做出了回答。解决方法很简单:
convert input.jpg -roll +400+0 output.jpg
其中 400 是以像素为单位的 x 偏移,0 是以像素为单位的 y 偏移(如果需要,您也可以使用负值来反转偏移的方向)。 请参阅“像坏电视一样滚动图像”部分here。