HBVCAM-8M1824U3 V11、マニュアルフォーカス指定が不安定で反映されず、フォーカスを動かして反映されることが多かった。
いろいろ試してみて、改善できた。
import cv2
import asyncio # プログラム全体を止めない非同期待ち時間指定用、asyncio.run(asyncio.sleep(4)) で4秒待ち
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 3264)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 2448)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 3264) # IMX179用
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 2448) # IMX179用
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print("width = " + str(width))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print("height = " + str(height))
ret, frame = cap.read()
# オートフォーカスを無効にする
cap.set(cv2.CAP_PROP_AUTOFOCUS, 0)
#cap.set(cv2.CAP_PROP_AUTOFOCUS, 0) # IMX179用
# マニュアルフォーカスの値を設定する
# この値を調整することでフォーカス位置を変更できます
focus_value = 0
cap.set(cv2.CAP_PROP_FOCUS, focus_value)
asyncio.run(asyncio.sleep(1)) # 反映待ち
while True:
ret, frame = cap.read()
asyncio.run(asyncio.sleep(1)) # 反映待ち
frame_resized = cv2.resize(frame, (800, 600)) # 画面に収まるようにリサイズ4:3
cv2.imshow('USB Camera e(end) 1-3(increase10-30) d(decrease10)', frame_resized)
key = cv2.waitKey(1)
if key == ord('e'):
break
elif key == ord('1'):
# フォーカス距離を10増やす
focus_value += 10
cap.set(cv2.CAP_PROP_FOCUS, focus_value)
asyncio.run(asyncio.sleep(1)) # 反映待ち
print("Focus Increased: ", focus_value)
elif key == ord('2'):
# フォーカス距離を20増やす
focus_value += 20
cap.set(cv2.CAP_PROP_FOCUS, focus_value)
asyncio.run(asyncio.sleep(1)) # 反映待ち
print("Focus Increased: ", focus_value)
elif key == ord('3'):
# フォーカス距離を30増やす
focus_value += 30
cap.set(cv2.CAP_PROP_FOCUS, focus_value)
asyncio.run(asyncio.sleep(1)) # 反映待ち
print("Focus Increased: ", focus_value)
elif key == ord('d'):
# フォーカス距離を減らす
focus_value -= 10
cap.set(cv2.CAP_PROP_FOCUS, focus_value)
asyncio.run(asyncio.sleep(1)) # 反映待ち
print("Focus Decreased: ", focus_value)
cap.release()
cv2.destroyAllWindows()
結局、反映待ち時間を入れることで、きちんと最初から反映されるようになった。
if IMX1 == 2:
cap.set(cv2.CAP_PROP_AUTOFOCUS, 0) # オートフォーカスを無効にする
asyncio.run(asyncio.sleep(1)) # 反映待ち
cap.set(cv2.CAP_PROP_FOCUS, FCS) # フォーカス設定
asyncio.run(asyncio.sleep(1)) # 反映待ち
こんな感じにすることで、USBカメラのオートフォーカスの有無によって、フォーカスを一気に合わせたり、フォーカス設定回避ができるようになった。
前の加工前のシート検査プログラムをUSBカメラ(センサー)を選んで使えるように、Ver1.1にアップデートしてみることにした。
コメント
コメントを投稿