2017-10-09 9 views
1

Je prends une capture d'écran (format PNG) en la redimensionnant, et en la réécrivant au format TIF, via le module scipy.misc (fonctions imread, imresize, imsave). L'image au format TIF doit être transmise à Tesseract-OCR. Cependant, Tesseract se plaint que le dpi spécifié dans les métadonnées du fichier TIF est 0. Comment peut-on spécifier cela lors de la sauvegarde de l'image via scipy.misc.imsave ou toute autre méthode?Comment peut-on spécifier ppp lors de l'enregistrement de l'image en tant que tif via scipy.misc.imsave?

Répondre

1

S'il vous plaît déposer celui-ci sous "toute autre méthode" :-)

Vous pouvez définir la résolution avec exiftool comme ceci:

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

Vérifiez avec 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 
    ... 
    ... 

Je vous suggère de débourser pour exécuter cette commande avec os.system(). Un Python wrapper existe, mais je ne l'ai jamais utilisé et je ne peux pas le garantir.

2

Sans analyser où vos problèmes viennent exactement de, the approach of Mark (peut-être que ça suffit pour vous, peut-être pas, je peux imaginer qu'il ya quelque chose d'autre dans votre code qui pourrait être la raison) peut être émulé en utilisant Pillow (et je ne ne vois pas une option pour cela dans l'emballage de scipy).

En fait, au lieu de réécrire les balises comme il le fait, nous nous soucions de ceux-ci tout en faisant notre tâche d'origine. En pratique, les deux approches devraient être acceptables. Avec une probabilité très élevée, scipy est déjà 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., cette liste contient 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',) 

Vérification avec 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