在使用 opencv
中的 ocr
读取之前,我需要增加图像的 dpi。问题是:
- 我现在不知道图像的 dpi
- 我不知道如何增加图像的 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
做类似的事情 - 请注意 exiftool
比 ImageMagick 小得多并且更容易维护,因为它 < 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/