如何用opencv增加dpi?

新手上路,请多包涵

在阅读 ocr in opencv 之前,我需要增加图像的 dpi。问题是:

  1. 我现在不知道图像的 dpi
  2. 我不知道如何增加图像的 dpi

我在谷歌搜索,几乎每个答案都建议使用 cv2.resize

 image = cv2.imread("source.png")
resized_image = cv2.resize(image, (100, 50)) #I need to change it to 300 DPI

resize 只是改变了图片的大小,毕竟没有增加dpi。我尝试使用它,然后在 Photoshop 中检查,dpi 没有改变。

怎么做 opencv

我需要将 dpi 更改为 300,为什么我需要知道当前的 dpi?因为如果它已经是 dpi > 300 ,我不需要转换它。

我用蟒蛇来做。

原文由 yozawiratama 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
1 个回答

dpi 只是 JPEG/TIFF/PNG 标头中的一个数字。在您 打印 图像之前,它与世界和他的狗完全无关,然后它确定打印的尺寸将以像素为单位的图像尺寸。

在图像处理过程中,它是无关紧要的。唯一感兴趣的是您拥有的像素数。这是图像质量或信息内容的最终决定因素——无论您如何描述它。

我不相信你可以用 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 做类似的事情 - 请注意 exiftoolImageMagick 小得多并且更容易维护,因为它 “只是” 一个(非常有能力的)单个 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 创建没有 dpi 信息的 1024x768 图像:

 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   # Change dpi

identify -verbose image.jpg                               # Examine

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
  ...
  ...

现在你可以看到,我们突然知道打印出来的尺寸有多大,而且像素数没有改变。

原文由 Mark Setchell 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题