【python-openCV】指定した位置を中心に画像を拡大(縮小)する方法!

 

この記事では、python-opneCVを使って、以下の画像のように指定した位置を中心に画像を拡大する方法をご紹介していきます。

指定位置を中心に画像を拡大するという作業イメージ動画

※画像中の白い〇が位置を変えずにどんどん大きくなっていることがわかると思います。作業イメージをわかりやすくするために動画にしていますが、以降で紹介するサンプルコードでは、拡大後の1枚の画像を出力するものになっています。

 

あなたのやりたいことと一致していれば、ぜひ続きをご覧ください。

 

スポンサーリンク

必要なライブラリ一覧

〇numpy

〇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アニメ)を作成する方法!

 

このように、私のブログでは様々なスキルを紹介しています。

過去記事一覧

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村 IT技術ブログへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました