質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

解決済

cv::VideoCapture capのcv::CAP_PROP_FRAME_WIDTHの中身とどのようにPCのシステムに働くのか知りたいです。

carnage0216
carnage0216

総合スコア194

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

2回答

0評価

0クリップ

8256閲覧

投稿2018/02/09 09:51

編集2018/02/09 12:29
cv::VideoCapture cap(0); cap.set(cv::CAP_PROP_FRAME_WIDTH, 幅); cap.set(cv::CAP_PROP_FRAME_HEIGHT, 高さ);

はopencvから提供されたソースコードです。出力ウィンドのサイズを変える働きをします。
以上のソースコードに関しての質問なのですが、載せましたプログラム

* eye-tracking.cpp: * Eye detection and tracking with OpenCV * * This program tries to detect and tracking the user's eye with webcam. * At startup, the program performs face detection followed by eye detection * using OpenCV's built-in Haar cascade classifier. If the user's eye detected * successfully, an eye template is extracted. This template will be used in * the subsequent template matching for tracking the eye. */ #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/objdetect/objdetect.hpp> cv::CascadeClassifier face_cascade; cv::CascadeClassifier eye_cascade; /** * Function to detect human face and the eyes from an image. * * @param im The source image * @param tpl Will be filled with the eye template, if detection success. * @param rect Will be filled with the bounding box of the eye * @return zero=failed, nonzero=success */ int detectEye(cv::Mat& im, cv::Mat& tpl, cv::Rect& rect) { std::vector<cv::Rect> faces, eyes; face_cascade.detectMultiScale(im, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, cv::Size(30,30)); for (int i = 0; i < faces.size(); i++) { cv::Mat face = im(faces[i]); eye_cascade.detectMultiScale(face, eyes, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, cv::Size(20,20)); if (eyes.size()) { rect = eyes[0] + cv::Point(faces[i].x, faces[i].y); tpl = im(rect); } } return eyes.size(); } /** * Perform template matching to search the user's eye in the given image. * * @param im The source image * @param tpl The eye template * @param rect The eye bounding box, will be updated with the new location of the eye */ void trackEye(cv::Mat& im, cv::Mat& tpl, cv::Rect& rect) { cv::Size size(rect.width * 2, rect.height * 2); cv::Rect window(rect + size - cv::Point(size.width/2, size.height/2)); window &= cv::Rect(0, 0, im.cols, im.rows); cv::Mat dst(window.width - tpl.rows + 1, window.height - tpl.cols + 1, CV_32FC1); cv::matchTemplate(im(window), tpl, dst, CV_TM_SQDIFF_NORMED); double minval, maxval; cv::Point minloc, maxloc; cv::minMaxLoc(dst, &minval, &maxval, &minloc, &maxloc); if (minval <= 0.2) { rect.x = window.x + minloc.x; rect.y = window.y + minloc.y; } else rect.x = rect.y = rect.width = rect.height = 0; } int main(int argc, char** argv) { // Load the cascade classifiers // Make sure you point the XML files to the right path, or // just copy the files from [OPENCV_DIR]/data/haarcascades directory face_cascade.load("haarcascade_frontalface_alt2.xml"); eye_cascade.load("haarcascade_eye.xml"); // Open webcam cv::VideoCapture cap(0); // Check if everything is ok if (face_cascade.empty() || eye_cascade.empty() || !cap.isOpened()) return 1; // Set video to 320x240 cap.set(CV_CAP_PROP_FRAME_WIDTH, 320); cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240); cv::Mat frame, eye_tpl; cv::Rect eye_bb; while (cv::waitKey(15) != 'q') { cap >> frame; if (frame.empty()) break; // Flip the frame horizontally, Windows users might need this cv::flip(frame, frame, 1); // Convert to grayscale and // adjust the image contrast using histogram equalization cv::Mat gray; cv::cvtColor(frame, gray, CV_BGR2GRAY); if (eye_bb.width == 0 && eye_bb.height == 0) { // Detection stage // Try to detect the face and the eye of the user detectEye(gray, eye_tpl, eye_bb); } else { // Tracking stage with template matching trackEye(gray, eye_tpl, eye_bb); // Draw bounding rectangle for the eye cv::rectangle(frame, eye_bb, CV_RGB(0,255,0)); } // Display video cv::imshow("video", frame); } return 0; }

の91~93行目の

cv::VideoCapture cap(0); cap.set(cv::CAP_PROP_FRAME_WIDTH, 幅); cap.set(cv::CAP_PROP_FRAME_HEIGHT, 高さ);


プログラムのヘッダファイル
<opencv2/imgproc/imgproc.hpp>
<opencv2/highgui/highgui.hpp>
<opencv2/objdetect/objdetect.hpp>のいずれかにcv::CAP_PROP_FRAME_WIDTHとcv::CAP_PROP_FRAME_HEIGHTの定義などが標準関数で書いてあるのでしょうか?

コンパイルする際に標準関数でないとコンパイル出来ないような気もしますが。

もう一つ質問があるのですが、以上に書いた

cv::VideoCapture cap(0); cap.set(cv::CAP_PROP_FRAME_WIDTH, 幅); cap.set(cv::CAP_PROP_FRAME_HEIGHT, 高さ);

がWindowsのウィンドの大きさに関与したシステムのデータに働くため出力ウィンドのサイズを変えることができるのでしょうか?

長文ですが、どうかよろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

yumetodo

2018/02/10 09:23

ところでhttps://ja.stackoverflow.com/questions/41614/opencv%e3%81%ae%e9%96%a2%e6%95%b0cv-cap-prop-frame-height%e3%81%ae%e4%b8%ad%e8%ba%ab%e3%81%8c%e7%9f%a5%e3%82%8a%e3%81%9f%e3%81%84%e3%81%a7%e3%81%99 でマルチポストされていませんか?
episteme

2018/02/10 15:30

↑ うわー...答える気が失せたわ。
carnage0216

2018/02/10 23:06 編集

はい、わたしが投稿したものす。知りたいという好奇心ゆえに他サイトにも登録していました。軽率な行為でした。 epistemeさんには大変申し訳ないことをしてしまいました。 本当に申し訳ありませんでした。 どうか許して頂けないでしょうか。 そして、epistemeさんが調べてくれていなかったら未だに暗中模索していました。 yumetodoさんにもお世話になっているので複雑ですが、人の質問を勝手に載せるのはやめてください。 僕に責任がありますが。
episteme

2018/02/10 23:32

↑ネットにあげるってのはバラマキを認めると同義やぞ。あなたはすべての引用にいちいち許可を得ているか?
carnage0216

2018/02/10 23:34

はい。許可をとります。
episteme

2018/02/10 23:39 編集

質問にあるOpenCVのコード、引用許可を取ったのか! スゲー あなたがそうすることを止めないが、誰であれ勝手な引用を妨げることはできんからね。
carnage0216

2018/02/10 23:39

そんなわけないじゃないですか。今回の件においては私がいけなかったです。わたしはyumetodoさんのような面倒な事はしないですが。
episteme

2018/02/10 23:44

先に謝っとく、申し訳ない。僕も積極的に面倒なことしてる。マルチポスト大嫌いだから。
carnage0216

2018/02/10 23:57

こちらこそ、申し訳ありませんでした。epistemeさんにはいつも助けて頂き、感謝しております。
yumetodo

2018/02/12 05:38 編集

無宣言のマルチポストは個人的には即BANものだと思っています(宣言してやるなら許す人です、私もここで質問してやっぱり本家StackOveflowに投げるとかやるので)。「umetodoさんにもお世話になっているので複雑ですが、人の質問を勝手に載せるのはやめてください。 」ってWeb上の公開されているページのURLを貼ることに許諾が必要というのは王政復古感ある話ですね、ばかばかしい。URLは著作物ではないのだから著作権法の定める引用を持ち出すまでもない。teratailと日本語版StackOveflowは回答者がかぶっているのでマルチポストはすぐわかります。
carnage0216

2018/02/12 12:33

わたしはyumetodoさんほど賢くないのでよくわかりませんが、気分を害されたなら悪いことをしました。ごめんなさい。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。