2017-10-09 2 views
1

Ich nehme eine Bildschirmaufnahme (PNG-Format) Größe ändern, und schreibe es wieder im TIF-Format, über scipy.misc Modul (imread, imresize, imsave Funktionen). Das TIF-Format-Bild wird in Tesseract-OCR eingegeben. Tesseract beschwert sich jedoch, dass die in den Metadaten der TIF-Datei angegebene Auflösung ist. Wie kann man dies beim Speichern des Bildes über scipy.misc.imsave oder eine andere Methode angeben?Wie kann man dpi beim Speichern von Bildern als tif über scipy.misc.imsave angeben?

Antwort

1

Bitte Datei dieses unter "jede andere Methode" :-)

Sie die Auflösung mit exiftool wie folgt einstellen:

exiftool SomeImage.tif -xresolution=300 -yresolution=300 -resolutionunit=inches 

Prüfen Sie es mit ImageMagick:

identify -verbose SomeImage.tif 

Image: SomeImage.tif 
    Format: TIFF (Tagged Image File Format) 
    Mime type: image/tiff 
    Class: DirectClass 
    Geometry: 100x100+0+0 
    Resolution: 300x300 
    Print size: 0.333333x0.333333 
    ... 
    ... 

Ich schlage vor, Sie Shell, um diesen Befehl mitauszuführen.

Ein Python wrapper existiert, aber ich habe es nie benutzt und kann nicht dafür bürgen.

2

Ohne zu analysieren, woher genau Ihre Probleme kommen, the approach of Mark (vielleicht ist das genug für Sie; vielleicht nicht; ich kann mir vorstellen, dass es etwas anderes in Ihrem Code gibt, das der Grund sein könnte) kann mit Pillow emuliert werden (und ich don sehe keine Option dafür in scipys Wrapper.

Eigentlich, anstatt Tags neu zu schreiben, wie er es tut, kümmern wir uns um diese während unserer ursprünglichen Aufgabe. In der Praxis sollten beide Ansätze in Ordnung sein.

Mit sehr hoher Wahrscheinlichkeit ist scipy bereits using Pillow under the hood (Note that Pillow (https://python-pillow.org/) is not a dependency of SciPy, but the image manipulation functions indicated in the list below are not available without it.; diese Liste enthält imsave).

from scipy.misc import ascent # test image 
import PIL.Image 

scipy_img = ascent().astype('uint8') 
arr2im = PIL.Image.fromarray(scipy_img) 

arr2im.save('test.tif', format='TIFF', 
     dpi=(100., 100.), # there still seems to be a bug when using int's here 
     compression='tiff_lzw',) 

Überprüfung mit exiftool:

ExifTool Version Number   : 10.63 
File Name      : test.tif 
... 
Image Width      : 512 
Image Height     : 512 
Bits Per Sample     : 8 
Compression      : LZW 
... 
X Resolution     : 100 
Y Resolution     : 100 
... 
Resolution Unit     : inches 
Image Size      : 512x512 
Megapixels      : 0.262 
Verwandte Themen