OpenCV:读取视频序列的帧

时间:2015-04-14 10:54:10

标签: c++ opencv

任何人都帮助我,我正在尝试运行代码来从文件夹中的视频中读取帧,但是在构建时成功但是在调试时没有任何输出 *我使用Visual Studio 2012,opencv 2.4.11版本
代码是:

    #include "stdafx.h"
    #include <opencv2/opencv.hpp>
    #include "opencv2/highgui/highgui.hpp"
    #include <iostream>

    using namespace cv;
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
    return 0; 
    }


    int main()
    {
    // Open the video file
    cv::VideoCapture capture("C:/Users/asus/Desktop/A.mp4");
    // check if video successfully opened
    if (!capture.isOpened())
    return 1;
    // Get the frame rate
    int rate= capture.get(CV_CAP_PROP_FPS);
    bool stop(false);
    cv::Mat frame; // current video frame
    cv::namedWindow("Extracted Frame");
    // Delay between each frame in ms
    // corresponds to video frame rate
    int delay= 1000/rate;
    // for all frames in video
    while (!stop) {
    // read next frame if any
   if (!capture.read(frame))
   break;
   cv::imshow("Extracted Frame",frame);
   // introduce a delay
   // or press key to stop
   if (cv::waitKey(delay)>=0)
   stop= true;
   }
 // Close the video file.
 // Not required since called by destructor
 capture.release();
 }

1 个答案:

答案 0 :(得分:1)

您的main()函数永远不会执行。执行的唯一事情是_tmain(),它什么也不做,立即返回。

我暂时没有做过很多Windows编程,但如果我没记错的话,这就是它的工作原理: 为编译器启用Unicode时

int _tmain(int argc, _TCHAR* argv[])

编译为

int wmain(int argc, wchar * argv[])

然后用作程序入口点。

由于您似乎没有在代码中使用任何Windows-API,因此我会忽略Microsoft执行多字节字符串的特定方式,这是不可移植的,并且只需使用普通的ASCII字符串,就像在{{1你准备使用的函数。

因此,要解决您的问题,只需抛弃main()函数即可。如果您遇到链接器错误,也许还需要在项目设置中禁用Unicode。