Pythonの学習の過程とか

学習の記録をつけておきましょう。Python3に少しずつ移行していきます。過去の記事のソースを2から3に、、、と考えましたが、新しいことをやったほうがいいですね。

Python OpenCVの基礎 resieで画像サイズを変えてみる

画像サイズを変えるのも簡単です。

resize

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) → dst¶

さっそく試してみましょ

単純な処理ですね。

  1. 画像を読み込む
  2. 高さと幅を取得し、さらにそれぞれを半分ににしたサイズを作成する
  3. cv2,resizeに入力画像とサイズを設定する(サンプルでは半分にしてある)
  4. またはサイズには、入力の高さと幅に対する倍率を設定する(もうひとつのサンプルは高さと幅を2倍にしてある)

結果

サンプルを載せてもあまり視覚的に意味が無いので。。。。。今回は結果サンプル無しです。すみません。

画像の縮小では、方式に気をつける

画像を縮小する場合には、その縮小方法に気をつける必要があります。

100x100の画像を50x50に縮小する場合を考えましょう。

ある1行について、100画素で表示していたものを50画素に縮めるわけですよね。

その縮めかたはどうしましょう?

間引く?となりの画素との平均?平均なら縦横の関係は?

など、考えることは意外とたくさんあります。

また、選択した縮小方式により、出力の画像は変わってきてしまうことになります。

Methodが用意されています

resizeには、その縮小の方式を指定することもできます。こちらを見てみましょう

interpolation – interpolation method:

INTER_NEAREST - a nearest-neighbor interpolation

INTER_LINEAR - a bilinear interpolation (used by default)

INTER_AREA - resampling using pixel area relation. It may be a preferred method for image decimation, as it gives moire’-free results. But when the image is zoomed, it is similar to the INTER_NEAREST method.

INTER_CUBIC - a bicubic interpolation over 4x4 pixel neighborhood

INTER_LANCZOS4 - a Lanczos interpolation over 8x8 pixel neighborhood

デフォルトはLINERのようですね。

このあたりは少し理解を深めておいたほうがいいかもしれません。 以下のサイトに詳しく解説してありました。ありがとうございます。

www.dfx.co.jp

画素の補間(Nearest neighbor,Bilinear,Bicubic) 画像処理ソリューション

to shrink an image, it will generally look best with CV_INTER_AREA interpolation, whereas to enlarge an image, it will generally look best with CV_INTER_CUBIC (slow) or CV_INTER_LINEAR (faster but still looks OK).

画像の縮小にはINTER_AREA、拡大にはINTER_CUBIC(処理遅め)、またはINTER_LINER(速くて見た目もよい)を使ってね、ということみたいです。

やっぱりサンプル

全くサンプルがないのも寂しいので、ちょっと作ってみました 上記のサンプルコードで、fx=2 fy=1に設定しました。ようするに幅だけが2倍になるということですね。

f:id:PeaceAndHiLight:20160109213542j:plain

f:id:PeaceAndHiLight:20160109213548j:plain

感謝

参考にさせていただきました。ありがとうございました。

tatabox.hatenablog.com

blog.goo.ne.jp