dpi只是JPEG/TIFF/PNG文件头中的一个数字。在打印图像之前,它完全与世界和人们无关,并决定了图像以像素为单位的尺寸大小。
在图像处理期间,dpi没有任何意义。唯一感兴趣的是你拥有的像素数量。这是图像质量或信息内容的最终决定因素,不论你想如何描述它。
我不认为你可以使用OpenCV设置它。你可以在终端中使用ImageMagick这样设置:
mogrify -set density 300 *.png # v6 ImageMagick
magick mogrify -set density 300 *.png # v7 ImageMagick
您可以使用以下方法进行检查:
identify -format "Density: %x x %y" SomeImage.jpg # v6 ImageMagick
magick identify -format ... as above # v7 ImageMagick
您可以使用终端中的
exiftool
执行类似的操作 - 请注意,
exiftool
比
ImageMagick更小,更易于维护,因为它只是一个(非常强大)的Perl脚本:
从EXIF IFD1信息中提取图像分辨率:
exiftool -IFD1:XResolution -IFD1:YResolution image.jpg
从图像中提取所有标签名称包含“Resolution”单词的标签:
exiftool '-*resolution*' image.jpg
设置image.jpg
的X/Y分辨率(密度):
exiftool -xresolution=300 -yresolution=300 image.jpg
以下是我在答案开头所说的示例...
使用 ImageMagick 创建一张大小为 1024x768,没有 dpi 信息的图片:
convert -size 1024x768 xc:black image.jpg
现在来看一下:
identify -verbose image.jpg
Image: image.jpg
Format: JPEG (Joint Photographic Experts Group JFIF format)
Mime type: image/jpeg
Class: PseudoClass
Geometry: 1024x768+0+0
Units: Undefined
Colorspace: Gray
Type: Bilevel
...
...
现在更改dpi并设置dpi单位,然后再次检查:
mogrify -set density 300 -units pixelsperinch image.jpg
identify -verbose image.jpg
Image: image.jpg
Format: JPEG (Joint Photographic Experts Group JFIF format)
Mime type: image/jpeg
Class: PseudoClass
Geometry: 1024x768+0+0 <--- Number of pixels is unchanged
Resolution: 300x300 <---
Print size: 3.41333x2.56 <--- Print size is now known
Units: PixelsPerInch <---
Colorspace: Gray
Type: Bilevel
...
...
现在你可以看到,我们突然知道打印出来的图片有多大,而像素数量并没有改变。