41619

[code]

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

は、opencvから提供されたソースコードです。出力ウィンドのサイズを変える働きをします。

以上のソースコードに関しての質問なのですが、載せましたプログラム

[code]

    　　/**
     　　* 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;
    }
    
[/code]

の

[code]

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

は、プログラムのヘッダファイル

[code]

    <opencv2/imgproc/imgproc.hpp>
    <opencv2/highgui/highgui.hpp>
    <opencv2/objdetect/objdetect.hpp>
    
[/code]

のいずれかに`cv::CAP_PROP_FRAME_WIDTH`と`cv::CAP_PROP_FRAME_HEIGHT`に関しての定義などが標準関数で書いてあるのでしょうか？

コンパイルする際に標準関数でないとコンパイル出来ないような気もしますが。  
`cv::CAP_PROP_FRAME_WIDTH`と`cv::CAP_PROP_FRAME_HEIGHT`がどのように標準関数で書いてあるのか`cv::CAP_PROP_FRAME_WIDTH`と`cv::CAP_PROP_FRAME_HEIGHT`の正体が知りたいです。  
どうかよろしくお願いいたします。


CC BY-SA 3.0
2018-02-09T12:38:43.390
41614
2018-02-09T19:29:03.520
2018-02-09T14:31:11.757
19110
27296
question
c++ opencv
opencvの関数CV_CAP_PROP_FRAME_HEIGHTの中身が知りたいです。


`cv::CAP_PROP_FRAME_WIDTH`と`cv::CAP_PROP_FRAME_HEIGHT`は、ざっくり言えば、openCV
で定義された定数です。

`opencv2/highgui/highgui.hpp`
の中から、更に別のヘッダーファイル`opencv2/videoio.hpp`がインクルードされ、その`videoio.hpp`の中で次のように定義されています。

[code]

    namespace cv
    {
    
        // 長いので省略
    
    /** @brief %VideoCapture generic properties identifier.
     Reading / writing properties involves many layers. Some unexpected result might happens along this chain.
     Effective behaviour depends from device hardware, driver and API Backend.
     @sa videoio_flags_others, VideoCapture::get(), VideoCapture::set()
    */
    enum VideoCaptureProperties {
           CAP_PROP_POS_MSEC       =0, //!< Current position of the video file in milliseconds.
           CAP_PROP_POS_FRAMES     =1, //!< 0-based index of the frame to be decoded/captured next.
           CAP_PROP_POS_AVI_RATIO  =2, //!< Relative position of the video file: 0=start of the film, 1=end of the film.
           CAP_PROP_FRAME_WIDTH    =3, //!< Width of the frames in the video stream.
           CAP_PROP_FRAME_HEIGHT   =4, //!< Height of the frames in the video stream.
           CAP_PROP_FPS            =5, //!< Frame rate.
    
        // まだたくさんあるので省略
    
         };
    
[/code]


CC BY-SA 3.0
2018-02-09T19:29:03.520
41619
2018-02-09T19:29:03.520
3605
41614
answer