Python OpenCVの基礎 resieで画像サイズを変えてみる
画像サイズを変えるのも簡単です。
resize
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) → dst¶
さっそく試してみましょ
単純な処理ですね。
- 画像を読み込む
- 高さと幅を取得し、さらにそれぞれを半分ににしたサイズを作成する
- cv2,resizeに入力画像とサイズを設定する(サンプルでは半分にしてある)
- またはサイズには、入力の高さと幅に対する倍率を設定する(もうひとつのサンプルは高さと幅を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のようですね。
このあたりは少し理解を深めておいたほうがいいかもしれません。 以下のサイトに詳しく解説してありました。ありがとうございます。
画素の補間(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倍になるということですね。
感謝
参考にさせていただきました。ありがとうございました。