OpenCVを使用して、Webカメラから多数の画像をキャプチャして保存したい。これは現在私のコードです:
import cv2
camera = cv2.VideoCapture(0)
for i in range(10):
return_value, image = camera.read()
cv2.imwrite('opencv'+str(i)+'.png', image)
del(camera)
これに伴う問題は、画像がいつ撮影されているかわからないため、多くの画像がぼやけてしまうことです。私の質問は次のとおりです。キーボードのキーをクリックして画像を取得する方法はありますか?
また、範囲の代わりに複数の画像を撮るより良い方法はありますか?
カメラフィードをcv2.namedWindow
で表示し、SPACE
を押すとスナップショットを撮る簡単なプログラムを次に示します。 ESC
を押すと終了します。
import cv2
cam = cv2.VideoCapture(0)
cv2.namedWindow("test")
img_counter = 0
while True:
ret, frame = cam.read()
cv2.imshow("test", frame)
if not ret:
break
k = cv2.waitKey(1)
if k%256 == 27:
# ESC pressed
print("Escape hit, closing...")
break
Elif k%256 == 32:
# SPACE pressed
img_name = "opencv_frame_{}.png".format(img_counter)
cv2.imwrite(img_name, frame)
print("{} written!".format(img_name))
img_counter += 1
cam.release()
cv2.destroyAllWindows()
ほとんどの場合、これで質問の答えになると思います。あなたが理解していない行がある場合はお知らせください。コメントを追加します。
SPACE
キーを押すごとに複数の画像を取得する必要がある場合は、内部ループが必要になるか、特定の数の画像を取得する関数を作成するだけです。
キーイベントはcv2.namedWindow
からのものであるため、フォーカスが必要であることに注意してください。
私はCVを開いた経験があまりありませんが、キーが押されたときにforループのコードを呼び出す場合は、whileループとraw_inputと条件を使用して、ループが永久に実行されないようにすることができます
import cv2
camera = cv2.VideoCapture(0)
i = 0
while i < 10:
raw_input('Press Enter to capture')
return_value, image = camera.read()
cv2.imwrite('opencv'+str(i)+'.png', image)
i += 1
del(camera)
コード例を分解する
import cv2
使用のためにopenCVをインポートします
camera = cv2.VideoCapture(0)
コンピュータに接続されているカメラのリストの最初のカメラを使用して、openCVビデオキャプチャタイプのカメラと呼ばれるオブジェクトを作成します。
for i in range(10):
次のインデントされたコードを10回ループするようプログラムに指示します
return_value, image = camera.read()
readメソッドを使用して、カメラオブジェクトから値を読み取ります。 2つの値で共鳴し、2つのデータ値を「return_value」と「image」という2つの一時変数に保存します
cv2.imwrite('opencv'+str(i)+'.png', image)
openCVメソッドimwrite(ディスクにイメージを書き込む)を使用し、一時データ変数のデータを使用してイメージを書き込みます
インデントが少ないということは、ループが終了したことを意味します...
del(camera)
camreaオブジェクトを削除します。もう必要ありません。
あなたは多くの方法であなたが要求することができます、1つはforループをwhileループに置き換えて(10回の代わりに永久に実行します)、そしてキープレスを待つことができます( danidee 入力中)
または、誰かがキーボードを押すたびに背景に隠れて画像をキャプチャする、はるかに邪悪なサービスを作成します。
これは、ラップトップのデフォルトカメラを使用して画像をキャプチャする簡単なプログラムです。これがすべての人にとって非常に簡単な方法になることを願っています。
import cv2
# 1.creating a video object
video = cv2.VideoCapture(0)
# 2. Variable
a = 0
# 3. While loop
while True:
a = a + 1
# 4.Create a frame object
check, frame = video.read()
# Converting to grayscale
#gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
# 5.show the frame!
cv2.imshow("Capturing",frame)
# 6.for playing
key = cv2.waitKey(1)
if key == ord('q'):
break
# 7. image saving
showPic = cv2.imwrite("filename.jpg",frame)
print(showPic)
# 8. shutdown the camera
video.release()
cv2.destroyAllWindows
あなたは私のgithubコードを見ることができます こちら