Q:

opencvの関数CV_CAP_PROP_FRAME_HEIGHTの中身が知りたいです。

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;
}

の
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::CAP_PROP_FRAME_WIDTHとcv::CAP_PROP_FRAME_HEIGHTがどのように標準関数で書いてあるのかcv::CAP_PROP_FRAME_WIDTHとcv::CAP_PROP_FRAME_HEIGHTの正体が知りたいです。
どうかよろしくお願いいたします。

A:

cv::CAP_PROP_FRAME_WIDTHとcv::CAP_PROP_FRAME_HEIGHTは、ざっくり言えば、openCV で定義された定数です。
opencv2/highgui/highgui.hpp の中から、更に別のヘッダーファイルopencv2/videoio.hppがインクルードされ、そのvideoio.hppの中で次のように定義されています。
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.

    // まだたくさんあるので省略

     };

