この記事では、python-opneCVを使って、以下の画像のように指定した位置を中心に画像を拡大する方法をご紹介していきます。
※画像中の白い〇が位置を変えずにどんどん大きくなっていることがわかると思います。作業イメージをわかりやすくするために動画にしていますが、以降で紹介するサンプルコードでは、拡大後の1枚の画像を出力するものになっています。
あなたのやりたいことと一致していれば、ぜひ続きをご覧ください。
※この作業をpythonというプログラミング言語を用いて実行していきます。インストールから始めたい方は以下からご覧ください。
必要なライブラリ一覧
〇numpy
〇openCV
いつもおなじみのこいつらだけですね。
numpy はAnacondaを使用すればあらかじめインストールされていますが、openCVは自分で追加インストールが必要です。
openCVのインストール方法については以下の記事で解説しています。
事前に用意しておく情報一覧
※()内の数値は以降で紹介するサンプルコード中の変数
〇拡大画像データ(sample.jpg)
〇横方向の拡大率(cx)
〇縦方向の拡大率(cy)
〇拡大する際の横方向基準位置(x1)
〇拡大する際の縦方向基準位置(y1)
以降のプログラムではこれらの情報を基準に画像を拡大(縮小)していきます。
あなたの状況に応じて、適宜これらの値を書き換えながら実行してみてください。
なお、拡大する際に基準としたい位置はどこなのかを探す必要がある場合、以下の記事で簡単にできるやり方をご紹介しています。
【python-openCV】クリック位置の座標を画像内に表示する方法
必要であればまずはこちらをご覧ください。
基準位置を中心に画像を拡大するサンプルコード
前置きが長くなりましたが、以下がサンプルコードです。
※このプログラムファイルと同じ場所にsample.jpgが保存されていることを前提に書いています。結果ファイルも同じフォルダに出力されます。
#ライブラリのインポート
import numpy as np
import cv2
#ベース画像の読み込み&情報入力
img=cv2.imread('sample.jpg',cv2.IMREAD_GRAYSCALE)
h,w=img.shape[:2]
cx=3
cy=3
x1=230 #pixel
y1=240 #pixel
#基準位置を確認するためのポイントを描写する
#必要なければ以降の2行は削除する
cv2.circle(img,center=(x1,y1),radius=10,color=255,thickness=-1)
cv2.imwrite('img_point.png',img)
#画像の拡大作業開始
x2=x1*cx #pixel
y2=y1*cy #pixel
size_after=(int(w*cx), int(h*cy))
resized_img=cv2.resize(img, dsize=size_after)
deltax=(w/2-x1)-(resized_img.shape[1]/2-x2)
deltay=(h/2-y1)-(resized_img.shape[0]/2-y2)
framey=int(h*cy*2)
framex=int(w*cx*2)
finalimg=np.zeros((framey,framex),np.uint8)
finalimg[int(-deltay+framey/2-resized_img.shape[0]/2):int(-deltay+framey/2+resized_img.shape[0]/2),
int(-deltax+framex/2-resized_img.shape[1]/2):int(-deltax+framex/2+resized_img.shape[1]/2)]=resized_img
finalimg=finalimg[int(finalimg.shape[0]/2-h/2):int(finalimg.shape[0]/2+h/2),int(finalimg.shape[1]/2-w/2):int(finalimg.shape[1]/2+w/2)]
#結果の出力
cv2.imwrite('final_img.jpg',finalimg)
結構長いですね・・・。
やっていることは簡単そうでも、プログラムを書くと案外大変そうだということがわかると思います。
なお、今回のプログラムは拡大の基準位置をわかりやすくするために、あえて白い丸を描写してから拡大させています。
この処理がなくても動きますので、必要ない方は15,16行目を削除すればOKです。
サンプルコードの実行結果
それでは最後にさきほどサンプルコードを拡大率を変えながらいろいろ実行してみましょう。
※左がベース画像、右が拡大(縮小)後の画像です。
〇cx=0.7, cy=0.7
〇cx=0.7, cy=1,3
〇cx=3, cy=3
どれも問題なく動作していますね。
おわりに
というわけで今回はpython-openCVを使って、指定した位置を中心に画像を拡大、縮小する方法をご紹介しました。
画像処理の際にぜひご活用ください。
なお、冒頭で今回紹介した結果を動画にしていたとおもいますが、その方法は以下の記事で紹介しています。
興味があればこちらもぜひご覧ください。
【python】複数画像からパラパラ漫画(gifアニメ)を作成する方法!
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント