0
0

More than 1 year has passed since last update.

OpenCVの解像度設定は1度出来なかったからと言って諦めてはいけない(戒め)

Last updated at Posted at 2023-01-19

背景

産業用のMV-CE050-30UCというUSB3のカメラでOpenCVによる画像処理を行いたかった。
デフォルトで対応していないと思い込んでいろいろ試行錯誤した後、
非常に簡単に対応させる手順が用意されていた。
なんとかOpenCVで画像が出て喜んだものの解像度が640 x 480。最大解像度まで上げたい。
メーカー標準のビューワーやGraphEditでは解像度変更は可能だった。
最大解像度は2592 x 1944、設定間隔は横16、縦2ずつの模様。
設定ファイル的なものは見つからず、どうやらプログラムから変更するしかないようだが・・・

実行環境

モジュール Ver 備考
python 3.10.0
opencv-python 4.7.0.68
numpy 1.24.1 opencv-pythonインストール時に自動でインストールされたもの
MVS 3.1.0 MV-CE050-30UCのデバイスドライバのインストールとユーティリティ

実施内容

OpenCVから解像度を変更した

デフォルト時を確認

デフォルト時 → 画像は取れる
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
出力結果
640.0
480.0

1600 x 1600で試した結果→エラー

1600x1600に変更
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1600.0)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1600.0)
print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
出力結果
0.0
0.0

CAP_PROP_SETTINGSによる変更 → 変更してもデフォルト値に戻る

デフォルト時
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_SETTINGS)
cv2.waitKey(0)
print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
出力結果
640.0
480.0

OpenCVのバージョン変更 3.7 → 3.6

pipで入れたopencv-pythonをアンインストールして
chocoで入れた3.6への環境変数PYTHONPATHを設定してみた。
っが結果は変わらなかった。設定が反映されない。

その他実施するなら・・・

・原因がよくわからないもののOpenCV側に問題がありそうなだったのでOpenCVの自前ビルド
・EWCLIBというものを使う案もあるらしい

成功例

どこで失敗するのか確認しながらやみくもにコピペしたら成功してしまった。

諦めきれずにセット時の結果を確認しながら2回設定してみた
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
print(cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1600.0))
print(cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1600.0))
print(cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1600.0))
print(cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1600.0))

print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
2番目
True
False
True
True
1600.0
1600.0

まとめ

1度失敗したからと諦めてしまうのは良くない。
3回くらいはチャレンジしてみるものです。

標準のソフトでも現状最大解像度はfps30は出ないので概ね他と同じ状態になった。
なんで失敗するの?について根本的な原因は不明です。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0