一部分の領域の加工
透明色 全く異なる画像を重ねるとき=画像を半分にして足し合わせる
赤の画像を足しわせるとき=赤を半分にして足し合わせる
新規画像の作成 新たなライブラリが必要「numpy」省略して書くときは
immport numpy as np
すべて要素が0の黒画像をまず作り透明画像の保存先を作る
redimg = np.zeros(kaoimg.shape, dtype = np.uints)
上からすべての要素を赤にするとき
redimg[:, :] = (0, 0, 255)
([:, :,]はroiを省略して書いてある。最初の点から最後の点まで)
半透明の画像と赤くしたい画像を合わせる
kaoimg = kaoimg//2 + redimg//2
※丸め誤差が生まれるので要素に誤差が生まれている
丸め誤差が生まれないようにする
kaoimg = (kaoimg*.7 + redimg:.3).astype(np.uints8)
すでにroiで部分領域を指定しているので画像を見たときに部分領域の加工は完了しているが元画像は変化していない
なので元画像に指定領域で半透明にするときはもう一度roiを取得し代入する
GUIの操作
ーマウスのイベントの処理の仕方ー
cv2.setMouseCallback「動作に応じて指定された関数が実行される」
定型文にif event〜があるがこれでイベントの分別をしている
よく使うイベント
cv2.EVENT_LBUTTONDOWN, LBUTTONUP cv2.EVENT_MOUSEMOVE
(クリックがないのはドラッグアンドドロップでボタンの上げ下げの情報が必要だから)
CallBack関数は戻り値を受け取らない
cv2.MOUSEWHEEL
は使えない(Opencvの機能限定版なのでこの動作を削除してある) flagも上記と同じで一部のみ使用可?
flags、キーボードの状態
param、setmousecallbackの渡すものが特殊なときに使うがそんな場合はあまりないので無視
flag、paramは不必要なので無視するが動かすのには必要なので受け取る
waitKey(0)は無限に待ってほしいので0、数字を入力するとms単位で待つがすぐに実行される
これまではwaitKeyで実行し直されても終了していたが、この設定時間内で変更が加えられると もう一度実行される
waitKeyが画像の表示などすべてを行っているのでimshowを使うときはwaitkeyを必ず使う
waitKeyを小さい数字にするとその時間内に実行完了しなかったときに諦めて表示せず無限ループに入ってしまう
while True:
k= cv2.EVENT_waitKey(10)
if k == 27:
break
if k == ord("s"):
cv2.imwrite("画像の名前", img)
[わからないものは消す。]