Opencvをtinkerboardで動かすときに画像が更新されない
Tinkerboardというラズパイの亜種みたいなのにusbのカメラモジュールを接続してタイムラプス撮影的なことをしようとしてうまくいかなかったので起こったことと対処方について。
import cv2
camera_ch = 5
camera = cv2.VideoCapture(camera_ch)
for i in range(1:10)
ret,frame = camera.read()
f = "test"+str(i)+".jpg"
cv2.imwrite(f,frame)
##なんかの処理してカメラを動かす
↑で10枚の画像が取れると思ったがどうやらframeが更新されないみたいなので同じ画像しか保存されない。ある程度の時間が立つと更新されるみたいだけれど。 ただし次のリアルタイムの画像を表示するコードはうまく画像が見れる。
import cv2
import time
channel = 5
cap = cv2.VideoCapture(channel)
print(cap.get(cv2.CAP_PROP_FPS))
while True:
ret, frame = cap.read()
cv2.imshow("camera", frame)
imshowがないのが問題なのかわからないがとりあえずimshowをもとのコードに挿入。 変化なし。ああわからねえ。 メモリがうまく制御できていなさそうなことだけはわかるのでしょうがなく毎回メモリの開放をしてあげようということで下の用に変更。
import cv2
from stepper import stepper
import time
camera_ch = 5
camera = cv2.VideoCapture(camera_ch)
frame = [0]*10
for i in range(5):
ret,frame[i] = camera.read()
f = "test"+str(i)+".jpg"
cv2.imwrite(f,frame[i])
#なんかの処理でカメラを動かす
camera.release() #opencvのメモリの開放
camera = cv2.VideoCapture(camera_ch) #メモリ開放してるので再度読み込み
一応これでカメラの画像が更新されるようになったが処理は遅くなるしもう少しうまい方法はないだろうか。なるべくよくわからんけど動いているのでヨシ!は避けたいのだが…