python - 如何用opencv增加dpi?

标签 python opencv

在使用 opencv 中的 ocr 读取之前,我需要增加图像的 dpi。问题是:

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

我在 Google 中搜索,几乎每个答案都建议使用 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,我不需要转换它。

我用 python 来做。

最佳答案

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

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

我不相信你可以用 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 小得多并且更容易维护,因为它 < em>“只是” 一个(非常有能力的)单个 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
  ...
  ...

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

关于python - 如何用opencv增加dpi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50503960/

相关文章:

python - HTTPS POST 请求 Python,返回 .csv

Python 函数及其 __call__ 属性

OpenCV::solvePNP() - 断言失败

android ndk 中的 OpenCv

python - OpenCV Python:无法将数组中的图像保存到视频中

OpenCV 图像比较

python - 如何使用 PIL 使所有白色像素透明?

python - 使用python,如何读取文件的 "date created"?

python - 如何将 XPath 元素转换为纯 html 文本?

image - 如何使图像呈现出陈旧、布满灰尘、颜色褪色的外观?