我正在尝试使用opencv编写一个非常基本的视频捕获程序,但尽管我付出了很多努力,但没有任何内容可写。我很确定我正在学习关于这个主题的所有教程。
以下是我正在使用的代码:
#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <videoInput.h>
static const cv::Size _SIZE(640, 480);
static const int FPS = 20;
int webcam = 0;
std::auto_ptr<videoInput> VI(NULL);
std::auto_ptr<cv::VideoWriter> outputVideo(NULL);
cv::Mat frame(_SIZE.height, _SIZE.width, CV_8UC3);
// get device list create videoInput
videoInput::listDevices();
VI.reset(new videoInput())
// choose first device
VI->setupDevice(webcam, _SIZE.width, _SIZE.height);
// always check
if(!VI->isDeviceSetup(webcam))
return -1; //-->
// set device frame rate
VI->setIdealFramerate(webcam, FPS);
// create named window and image
cv::namedWindow("CAM");
do
if (VI->isFrameNew(webcam))
{
VI->getPixels(webcam, (unsigned char*)frame.data, false, true); // получение пикселей в BGR
if (outputVideo.get())
{
(*outputVideo).write( frame);
}
char c = cv::waitKey(5);
if (!IsWindowVisible((HWND)cvGetWindowHandle("CAM")) || c==27)
{
exit(0);
}
cv::imshow("CAM", frame);
} while(1);
我尝试了各种扩展和各种Fourcc值。通常,在除avi之外的任何扩展名上,都会创建writer但不执行任何操作。相反,avi文件编写器根本无法创建。
我已经读过可能缺少编解码器,但是这意味着什么 - 我究竟需要把它放在哪里以便opencv找到它们?
总而言之,我很困惑。这是教程代码,它应该可以工作。