実現したいこと
カメラにオートフォーカス機能がついており、焦点距離を設定して画像を取得したいと思っています。
下のコードで
画像を撮影保存まではできるようになりました。
どなたかご教授お願いいたします。
c++
1#include "opencv2/opencv.hpp" 2 3int main(int argh, char* argv[]) 4{ 5 VideoCapture cap(0);//デバイスのオープン 6 //cap.open(0);//こっちでも良い. 7 8 if(!cap.isOpened())//カメラデバイスが正常にオープンしたか確認. 9 { 10 //読み込みに失敗したときの処理 11 return -1; 12 } 13 14 Mat frame; //取得したフレーム 15 while(cap.read(frame))//無限ループ 16 { 17 // 18 //取得したフレーム画像に対して,クレースケール変換や2値化などの処理を書き込む. 19 // 20 21 imshow("win", frame);//画像を表示. 22 const int key = cv::waitKey(1); 23 if(key == 'q'/*113*/)//qボタンが押されたとき 24 { 25 break;//whileループから抜ける. 26 } 27 else if(key == 's'/*115*/)//sが押されたとき 28 { 29 //フレーム画像を保存する. 30 imwrite("img.png", frame); 31 } 32 } 33 destroyAllWindows(); 34 35 return 0; 36} 37
Webカメラでしょうか?
一応、set() で設定できるパラメータに CV_CAP_PROP_FOCUS というのがありますが、OS やカメラによっては動かないかもしれません。
http://answers.opencv.org/question/5136/change-focus-of-a-v4l2-cam/
logicool c615のカメラをusbでつないでいます
一度試してみます
コンパイル画像取得はできました。
dの箇所に任意の焦点距離を入力したのですが単位はmmになるのでしょうか
??
すいません。
リファレンス見てもなにも書かれてないのでちょっとわからないです。自分は使ったことがないので。
https://docs.opencv.org/master/d4/d15/group__videoio__flags__base.html#ggaeb8dd9c89c10a5c63c139bf7c4f5704da25fe3d87b62a918427d49f3d43aef714
他の方法になるのですが取得した画像の焦点距離を出す方法はあるのでしょうか?
カメラ行列から求める方法もあったのですが、焦点距離を取り出せる関数などがあればと思いまして...
Linux/V4L2環境前提ですが https://github.com/opencv/opencv/blob/4.0.1/modules/videoio/src/cap_v4l.cpp#L1591 → https://www.linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/spec-single/v4l2.html "The unit is undefined." だそうです。(ひどい)
色々とありがとうございました
あなたの回答
tips
プレビュー