opencvでOCRで読み込む前に、画像のdpiを上げる必要があります。
1.自分の画像のdpiがわからない 2. 画像のdpiを上げる方法がわからない。
Googleで検索してみると、ほとんどの回答が resize
を使うことを勧めています。
image = cv2.imread("source.png")
resized_image = cv2.resize(image, (100, 50)) #I need to change it to 300 DPI
リサイズは画像の大きさを変えるだけで、結局dpiを上げることはないのです、なぜなら使ってみて、フォトショップで確認するとdpiは変わっていなかったからです
この2つの質問について、どうかご教示ください。
opencvでどのように行うか?
正直なところ、私はdpiを300に変更する必要があるのですが、なぜ現在のdpiを知る必要があるのでしょうか?なぜなら、すでにdpi > 300
であれば、それを変換する必要はありません。
pythonでやってます。
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
を使えば同様のことができます - exiftool
は "just" 1 つの Perl スクリプトなので ImageMagick よりもはるかに小さく、メンテナンスが簡単なことに注意してください。
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
...
...
そして今、突然プリントの大きさがわかり、画素数は変わっていないことがおわかりいただけたと思います。
古い記事ですが、テッセラクトは文字の高さを30ピクセル程度にするとより良く動作することがテストされ、判明していますことをお伝えしたいと思います。以下のリンクからご確認ください。
DPIは、モニタ、スキャナ、カメラなどのグラフィックデバイスに継承されるプロパティです。例えば、画像をスキャンする場合、より良い品質の画像を得たいので、スキャナオプションでDPI値を高く設定するとします。より良いDPIオプションがない場合、より多くのスキャン解像度をサポートする、より良いスキャナを購入する必要があります。100 000 DPI]1を達成できるデバイス/方法があります。