#author("2025-04-24T15:52:48+09:00","","") #author("2025-04-24T16:00:38+09:00","","") [[FrontPage]] *画像関連 [#rde2915d] **画像の拡大・縮小 [#b63e3525] 画像の高さ(h)と幅(w)を取得し、幅を基準にして画像を任意の値に縮小or拡大をするための縮小率を計算し、cv2.resize 関数で、画像をリサイズしています。 h,w = img.shape[:2] r = X/w Xピクセルに縮小するための比の計算 img = cv2.resize(img, None, fx=r,fy=r)#縦横の比を維持したまま拡大、縮小 **注目領域の取得 [#i47b95ed] 注目領域を取得するためには、始点と終点の座標を取り(ここは気合)、それをもとに取得する。 kaoimg = img[52:216, 189:365]注目領域の取得[始点y:終点y+1, 始点x:終点x+1] **画像の四則演算 [#p3a7c5ee] 四則演算の(+)画素の値増えるから明るくなる、(-)暗くなる。(/)全体的に暗くなるが、実数でないと行けないため、//を利用する。~ また、0~255の範囲を超えると、計算結果-255の結果が値になる。~ ex)暗いところは明るく、明るいところはそのままにしておくコード kaoimg = kaoimg//2+127#0=>127,255=>255にする書き方 *GUI操作( mouse, waitKey, double buffering ) [#k94df602] **cv2.setMouseCallback でマウス操作を追加。~ [#d63135a5] よく使うマウスイベントは以下の通り~ 左ボタンクリック (EVENT_LBUTTONDOWN, EVENT_LBUTTONUP)~ 中ボタンクリック (EVENT_MBUTTONDOWN, EVENT_MBUTTONUP)~ 右ボタンクリック (EVENT_RBUTTONDOWN, EVENT_RBUTTONUP)~ 左ボタンダブルクリック (EVENT_LBUTTONDBLCLK)~ 中ボタンダブルクリック (EVENT_MBUTTONDBLCLK)~ 右ボタンダブルクリック (EVENT_RBUTTONDBLCLK)~ マウスホイール (EVENT_MOUSEWHEEL, getMouseWheelDelta)~ ex)画像上でクリックした場所に丸を描く #code(py){{ def draw_circle(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: # 左クリックされたら cv2.circle(img, (x, y), 20, (0, 0, 255), -1) # 赤丸を描く }} **cv2.waitKey() でキー入力待ち。~ [#b397a8bd] ex)ESCキー(27)が押されたら終了。 #code(py){{ if cv2.waitKey(10) & 0xFF == 27: # ESCキー = 27 break }} **.copy [#k2f5af7c] ex)範囲取得した画像のコピーを作成.copyは入力のコピーを作る際にも有用 kaoimg = img[52:216, 189:365].copy() *番外編 [#f73300e5] **範囲取得した画像内を加工 [#d5acaa2b] ex)範囲内に赤四角作成 cv2.rectangle(kaoimg, (10,10),(30,30),(0,0,255),-1) **半透明塗りつぶしのやり方 [#sd7081a6] ex)半透明赤の塗りつぶしのやり方①~ 真っ黒塗りつぶしを作成→真っ黒を真っ赤にする→元画像に半透明真っ赤合体の流れで行う redimg = np.zeros( kaoimg.shape, dtype=np.uint8) 真っ黒作成 redimg[:,:] = (0,0,255)真っ黒を真っ赤に kaoimg = kaoimg//2 + redimg//2半透明真っ赤合体 半透明赤の塗りつぶしのやり方②~ redimg = np.zeros( kaoimg.shape, dtype=np.uint8) 真っ黒作成 redimg[:,:] = (0,0,255)真っ黒を真っ赤に kaoimg = (kaoimg*.7 + redimg*.3).astype(np.uint8) img[52:216, 189:365] = kaoimg部分的に加工したものを元画像に貼り付ける=>透明色の塗りつぶし