はじめに
python*openCVでの画像の一部を拡大表示するためのプログラムです。
問題
openCVを使って以下のような画像を表示し、横断歩道の四隅をマウス操作でクリックする際に
画面いっぱいまでしか拡大できず、さらに拡大したいと思っていました。
なので、画像の中心は変えずに、倍率を指定して拡大するようなプログラムを作成しました。
解決方法
import cv2
# 画像読み込み
input_image_path = "input_image.jpg" # 入力画像のファイルパスを指定してください
output_image_path = "output_image.jpg" # 出力画像のファイルパスを指定してください
scale_factor = 2 # 拡大倍率(縦も横も元の画像の半分になるようにするため、2を指定)
# 画像を読み込む
image = cv2.imread(input_image_path)
# 画像の高さと幅を取得
height, width = image.shape[:2]
# 中心座標を計算
center_x = width // 2
center_y = height // 2
# 切り抜く領域の左上と右下の座標を計算
left = int(center_x - width / (2 * scale_factor))
right = int(center_x + width / (2 * scale_factor))
top = int(center_y - height / (2 * scale_factor))
bottom = int(center_y + height / (2 * scale_factor))
# 切り抜いた領域を拡大
cropped_and_scaled_image = image[top:bottom, left:right]
# 拡大後の画像を保存
cv2.imwrite(output_image_path, cropped_and_scaled_image)
# 表示(オプション)
cv2.imshow("Cropped and Scaled Image", cropped_and_scaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
ちなみに
left = int(center_x - width / (2 * scale_factor))
は intがないと、きりの悪い倍率の時にうまくいかないのでその対策です。
おわりに
chatGPTを使ったら秒でしたが、一回のやり取りではうまくいかなかったので
もし誰かの時短になれればと思っています。