OpenCVを使ってUSBカメラで撮っている画像に四角を書いた画像と書く前の画像両方を保存したい
解決したいこと
USBカメラで表示している画像(OpenCVで四角を上書きしたもの)について
四角を上書きする前と上書きしたあとの画像の両方を保存したいですが同一の四角が上書きされた画像が保存されており、うまくできません
無限ループなので思ったタイミングで動いてないのでしょうか。。。。
- OpenCVでUSBカメラの画像を表示させたい → できた
- 表示している画像に四角を描画して表示する → できた
- キーボードを押した時に画面に表示させている画像を保存する → できた
- 四角を上書きする前と上書きしたあとの画像の両方を保存 → できてない
環境
Windows 10
python 3.8.9
opencv-python 4.5.1.48
USBカメラ
Anker PowerConf C302
発生している問題・エラー
四角が上書きされた同一の画像2枚が保存されてしまう
該当するソースコード
import cv2
from datetime import datetime
cap = cv2.VideoCapture(1,cv2.CAP_DSHOW)
if cap.isOpened() == True:
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 2560/2)#1280
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1440/2)#720
cap.set(cv2.CAP_PROP_SETTINGS, 1)
# 領域
w = (430, 240)
h = (850, 480)
while True:
# VideoCaptureから1フレーム読み込む、表示(をひたすらループ)
ret, frame = cap.read()
# 保存用の生画像
image = frame # ここで元の画像を残したつもり
# 四角を描画
frame = cv2.rectangle(frame, w, h, (0, 255, 0), thickness=2)
# 画面表示
cv2.imshow('Raw Frame', frame)
key = cv2.waitKey(1)
# keyが(Space)だったらキャプチャする
if key == 32:
# ここのファイル保存1と2が同じ画像になっているのをなんとかしたい
date = datetime.now().strftime("%Y%m%d_%H%M%S")
path = "./" + date + "cap1.jpg"
cv2.imwrite(path, image) # ファイル保存1
path = "./" + date + "cap2.jpg"
cv2.imwrite(path, frame) # ファイル保存2
# key が27(ESC)だったらBreakする
if key == 27:
break
# キャプチャをリリースして、ウィンドウをすべて閉じる
cap.release()
cv2.destroyAllWindows()
else:
print("no camera")
cap.release()
0