Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 使用FFmpeg无损地将JPEG图像序列合并到网格中_Image Processing_Ffmpeg_Jpeg_Crop - Fatal编程技术网

Image processing 使用FFmpeg无损地将JPEG图像序列合并到网格中

Image processing 使用FFmpeg无损地将JPEG图像序列合并到网格中,image-processing,ffmpeg,jpeg,crop,Image Processing,Ffmpeg,Jpeg,Crop,我有一系列的图像,它们是一个较大图像的块,共同构成了整个图像。这些块是沿均匀间隔的水平线和垂直线分割原始图像的结果,因此它们没有奇怪的尺寸 有没有一种方法可以在不重新编码图像的情况下将它们与FFmpeg(或其他类似ImageMagick的东西)结合起来 建议使用hstack或vstackFFmpeg过滤器,但我的图像块不一定是原始图像的全宽或全高 像这样: 也许这可以通过使用hstack或vstack的多个FFmpeg命令来实现(不过我更喜欢一个命令)。还是使用复杂的过滤器 e、 g 编

我有一系列的图像,它们是一个较大图像的块,共同构成了整个图像。这些块是沿均匀间隔的水平线和垂直线分割原始图像的结果,因此它们没有奇怪的尺寸

有没有一种方法可以在不重新编码图像的情况下将它们与FFmpeg(或其他类似ImageMagick的东西)结合起来

建议使用
hstack
vstack
FFmpeg过滤器,但我的图像块不一定是原始图像的全宽或全高


像这样:

也许这可以通过使用
hstack
vstack
的多个FFmpeg命令来实现(不过我更喜欢一个命令)。还是使用复杂的过滤器


e、 g


编辑:我尝试使用FFmpeg的
filter\u complex

ffmpeg -i 0.jpg -i 1.jpg -i 2.jpg -i 3.jpg -i 4.jpg -i 5.jpg \
-filter_complex "[0][1]hstack=inputs=2[row 0]; \
                 [2][3]hstack=inputs=2[row 1]; 
                 [4][5]hstack=inputs=2[row 2]; 
                 [row 0][row 1][row 2]vstack=inputs=3[out]" \
-map "[out]" -c copy out.jpg

但它不能同时过滤和复制流。

您可以使用ImageMagick进行过滤和复制。但是,它将解压并重新压缩您的jpg文件。你会失去一些品质

IM 6的Unix语法:

convert \
\( 0.jpg 1.jpg +append \) \
\( 2.jpg 3.jpg +append \) \
\( 4.jpg 5.jpg +append \) \
-append \
mona_lisa.jpg

如果使用Windows,请从括号中删除\并将\的结尾替换为^

如果使用IM 7,用magick替换convert。

我发现了一个有趣的功能,它将此功能添加到了jpegtran中。它不会分割块,因此每个轴上的图像需要是8个甚至16个像素的倍数

不幸的是,它与为ubuntu10分发的libjpeg 6b背道而驰。这包括一些来自8d的补丁,实际上与任何正式的libjpeg版本都不完全对应(据我所见)

您需要下载ubuntu10.04源代码,提取它们的libjpeg,并对其进行修补。这些步骤是:

wget http://old-releases.ubuntu.com/releases/releases/10.04/release/source/ubuntu-10.04-src-1.iso
现在打开ISO并从
ubuntu/pool/main/libj/libjpeg6b
中取出文件。Archive Manager可以做到这一点,也许还有一些可编写脚本的工具

现在运行:

# original sources
tar xf libjpeg6b_6b.orig.tar.gz
cd jpeg-6b

# apply ubuntu patches
zcat ../libjpeg6b_6b-15ubuntu1.diff.gz | patch

# apply jpegtran patches
patch < ../append-jpeg6b.patch

./configure
make
sudo make install
使:


大多数工具都会解压和重新压缩JPG,因此您将失去一些质量。ImageMagick可以使用convert with append进行网格组合。但是ImageMagick会像上面提到的那样解压和重新压缩JPG。我似乎记得libvips的工作原理是分解图像,分别压缩宏块,然后将数据合并到一起。您可能会在其源代码中找到一些有用的东西@Brad抱歉,libvips会像ImageMagick一样解压和重新压缩。我在jpegtran中找到了这个有趣的补丁——它添加了两个jpg图像的无损附加:您可能可以从中找到一些东西。@jcupitt Lol,像magic一样,您可以停在这个线程旁边。:-)是的,我的建议不是让他们直接使用libvip,而是让他们看到你是如何用JPEG重新组装宏块的。我的记忆正确吗?你分别对每个块进行压缩,然后重新组装?
+append
是hstack,而
-append
是vstack。整洁的
jpegtran -appright 1.jpg 0.jpg > join.jpg