本文整理汇总了C++中cv::VideoWriter类的典型用法代码示例。如果您正苦于以下问题:C++ VideoWriter类的具体用法?C++ VideoWriter怎么用?C++ VideoWriter使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了VideoWriter类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1:
void Tracker2D::writeToVideo(cv::VideoWriter & writer)
{
cv::Mat dispImage;
drawTrackers(dispImage);
writer.write(dispImage);
}
开发者ID:bucketzxm,项目名称:slam,代码行数:7,代码来源:Tracker2D.cpp
示例2: imgproc
//.........这里部分代码省略.........
findContours(src, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);
//printf("Num contours: %lu\n", contours.size());
std::vector<double> contour_area, contour_arclength;
contour_area.resize(contours.size());
contour_arclength.resize(contours.size());
std::vector<unsigned int> circle_index;
for(unsigned int idx = 0; idx < contours.size(); idx++)
{
if(contours[idx].size() > 25)
{
cv::Mat contour(contours[idx]);
contour_area[idx] = contourArea(contour);
if(contour_area[idx] > 50)
{
contour_arclength[idx] = arcLength(contour,true);
float q = 4*M_PI*contour_area[idx] /
(contour_arclength[idx]*contour_arclength[idx]);
if(q > 0.8f)
{
circle_index.push_back(idx);
//printf("isoperimetric quotient: %f\n", q);
//Scalar color( rand()&255, rand()&255, rand()&255 );
//drawContours(contours_dark, contours, idx, color, 1, 8);
}
}
}
}
std::list<Circle> circles;
for(unsigned int i = 0; i < circle_index.size(); i++)
{
Circle c;
cv::Moments moment = moments(contours[circle_index[i]]);
float inv_m00 = 1./moment.m00;
c.center = cv::Point2f(moment.m10*inv_m00, moment.m01*inv_m00);
c.radius = (sqrtf(contour_area[circle_index[i]]/M_PI) + contour_arclength[circle_index[i]]/(2*M_PI))/2.0f;
circles.push_back(c);
}
// Get the circles with centers close to each other
std::vector<std::list<Circle> > filtered_circles;
std::list<Circle>::iterator it = circles.begin();
unsigned int max_length = 0;
while(it != circles.end())
{
std::list<Circle> c;
c.push_back(*it);
cv::Point c1 = it->center;
std::list<Circle>::iterator it2 = it;
it2++;
while(it2 != circles.end())
{
cv::Point c2 = it2->center;
std::list<Circle>::iterator it3 = it2;
it2++;
if(hypotf(c2.x - c1.x, c2.y - c1.y) < 10)
{
c.push_back(*it3);
circles.erase(it3);
}
}
unsigned int length_c = c.size();
if(length_c > 1 && length_c > max_length)
{
max_length = length_c;
filtered_circles.push_back(c);
}
it2 = it;
it++;
circles.erase(it2);
}
if(filtered_circles.size() > 0)
{
Circle target_circle;
target_circle.radius = std::numeric_limits<float>::max();
for(it = filtered_circles.back().begin(); it != filtered_circles.back().end(); it++)
{
//printf("circle: c: %f, %f, r: %f\n", it->center.x, it->center.y, it->radius);
if(it->radius < target_circle.radius)
{
target_circle.radius = it->radius;
target_circle.center = it->center;
}
}
circle(color_src, cv::Point(target_circle.center.x, target_circle.center.y), target_circle.radius, cv::Scalar(0,0,255), 2);
printf("target: c: %f, %f, r: %f\n", target_circle.center.x, target_circle.center.y, target_circle.radius);
}
#if defined(CAPTURE_VIDEO)
static cv::VideoWriter video_writer("output.mp4", CV_FOURCC('M','J','P','G'), 20, cv::Size(width, height));
video_writer.write(color_src);
#endif
imshow("Target", color_src);
cv::waitKey(1);
}
开发者ID:magic-upenn,项目名称:magic2010,代码行数:101,代码来源:imgproc.cpp
示例3: rgbCallback
/**
* Callback function for the rgb image. Saves each image received
* as a message on the rgb video, using the rgb video writer.
*
* @param msg a ROS image message.
*/
void rgbCallback(const sensor_msgs::ImageConstPtr &msg)
{
cv_bridge::CvImagePtr cv_ptr;
// Copies the image data to cv_ptr and handles exceptions
try
{
cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8);
}
catch (cv_bridge::Exception &e)
{
ROS_ERROR("cv_bridge exception: %s", e.what());
return;
}
// Check for invalid image
if (!(cv_ptr->image.rows) || !(cv_ptr->image.cols))
{
ROS_ERROR("cv_ptr error: invalid image frame received");
exit(-1);
}
// Opens the rgb video writer if it's not opened yet.
if (!is_open_rgb)
{
std::string rgb_name = ros::package::getPath("vision") + "/data/rgb_video.avi";
rgb_writer.open(rgb_name.c_str(), CV_FOURCC('P','I','M','1'),
25, cv::Size(cv_ptr->image.cols, cv_ptr->image.rows),true);
if (!rgb_writer.isOpened()) ROS_ERROR("Error! Could not open rgb video writer!");
else is_open_rgb = true;
}
rgb_writer << cv_ptr->image; // Saves the rgb image on the rgb video.
}
开发者ID:unball,项目名称:vision,代码行数:39,代码来源:save_kinect_video.cpp
示例4:
~DetectFromVideo()
{
if (vWriter.isOpened())
{
vWriter.release();
}
};
开发者ID:limingyangpro,项目名称:Local-Geometric-Consensus-Examples,代码行数:7,代码来源:detectfromvideo.hpp
示例5: recordColor
bool recordColor(const QString& file, int fourcc)
{
//const int fourcc = CV_FOURCC('L', 'A', 'G', 'S');
//const int fourcc = CV_FOURCC('X', '2', '6', '4');
//const int fourcc = CV_FOURCC('Z', 'L', 'I', 'B');
//const int fourcc = CV_FOURCC('M', 'J', 'P', 'G');
//const int fourcc = CV_FOURCC_PROMPT;
//const int fourcc = CV_FOURCC('H', 'F', 'Y', 'U');
//int fourcc = CV_FOURCC('H', 'F', 'Y', 'U');
colorFile = (file + ".avi").toStdString();
colorWriter.open(
colorFile,
fourcc,
30.0,
cv::Size(ColorFrame::WIDTH, ColorFrame::HEIGHT),
true
);
if (colorWriter.isOpened()) {
colorBuffer.create(cv::Size(ColorFrame::WIDTH, ColorFrame::HEIGHT), CV_8UC3);
colorFrame = new ColorFrame();
return true;
}
colorFile.clear();
return false;
}
开发者ID:jonatanfm,项目名称:tfg,代码行数:28,代码来源:WidgetRecorder.cpp
示例6:
~StreamRecorder()
{
colorWriter.release();
depthWriter.release();
skeletonWriter.close();
if (colorFrame != nullptr) delete colorFrame;
if (depthFrame != nullptr) delete depthFrame;
if (skeletonFrame != nullptr) delete skeletonFrame;
}
开发者ID:jonatanfm,项目名称:tfg,代码行数:9,代码来源:WidgetRecorder.cpp
示例7: operator
void operator()(const cv::Mat& image,bool record)
{
// no image no fun
if (image.empty()) return;
int cF = currentFrame ? 1 : 0;
int pF = currentFrame ? 0 : 1;
// resize the image
cv::resize(image,frames[cF],cv::Size(image.cols*scale,image.rows*scale),0,0,cv::INTER_LINEAR);
std::cout << "Current: " << cF << " Previous: " << pF << std::endl;
std::cout << "Image " << image.size() << " c:" << image.channels() << " > " << frames[cF].size() << std::endl;
if (record && !output.isOpened())
{
// fourcc
int fourCC = FourCC<'X','V','I','D'>::value;
// set framerate to 1fps - easier to check in a standard video player
if (output.open("flow.avi",fourCC,25,frames[cF].size(),false))
{
std::cout << "capture file opened" << std::endl;
}
}
// make a copy for the initial frame
if (frames[pF].empty())
frames[cF].copyTo(frames[pF]);
if (!flow.empty())
flow = cv::Mat::zeros(flow.size(),flow.type());
// calculate dense optical flow
cv::calcOpticalFlowFarneback(frames[pF],frames[cF],flow,.5,2,8,3,7,1.5,0);
// we can't draw into the frame!
cv::Mat outImg = frames[cF].clone();
drawOptFlowMap(flow,outImg,8,cv::Scalar::all(255));
cv::imshow("Flow",outImg);
// flip the buffers
currentFrame = !currentFrame;
// record the frame
if (record && output.isOpened())
output.write(outImg);
}
开发者ID:seichter,项目名称:sandbox,代码行数:50,代码来源:farneback-test.cpp
示例8: recordDepth
bool recordDepth(const QString& file, int fourcc)
{
depthFile = (file + ".avi").toStdString();
depthWriter.open(
depthFile,
fourcc,
30.0,
cv::Size(DepthFrame::WIDTH, DepthFrame::HEIGHT),
true
);
if (depthWriter.isOpened()) {
depthBuffer.create(cv::Size(DepthFrame::WIDTH, DepthFrame::HEIGHT), CV_8UC3);
depthFrame = new DepthFrame();
return true;
}
depthFile.clear();
return false;
}
开发者ID:jonatanfm,项目名称:tfg,代码行数:20,代码来源:WidgetRecorder.cpp
示例9: main
int main ( int argc,char** argv )
{
ros::init ( argc,argv,"MultiLaneDetectionNode" );
ros::NodeHandle nh_;
cv::namedWindow(OPENCV_WINDOW);
if ( argc>5 ) {
time_t rawTime;
struct tm * timeInfo;
char buffer[80];
std::time ( &rawTime );
timeInfo = std::localtime ( &rawTime );
std::strftime ( buffer,80,"%F-%H-%M-%S",timeInfo );
std::string time ( buffer );
std::string suffix = "_"+time+".avi";
vidRec.open ( argv[5]+suffix,CV_FOURCC ( 'M','P','4','V' ),20,cv::Size ( 640,480 ) );
}
caffe::Caffe::SetDevice(0);
caffe::Caffe::set_mode(caffe::Caffe::GPU);
caffe::Caffe::set_phase(caffe::Caffe::TEST);
caffe_net = new caffe::Net<float>(argv[1]);
caffe_net->CopyTrainedLayersFrom(argv[2]);
mean_image = cv::imread(argv[3]);
std::vector<cv::Mat> splitChannels_mean;
cv::split(mean_image,splitChannels_mean);
float *mean_data = mean.mutable_cpu_data();
int frameSize = mean_image.cols*mean_image.rows;
for(int i = 0;i<3;i++){
std::copy(splitChannels_mean[i].data, splitChannels_mean[i].data+frameSize, (float*)mean_data+frameSize*i);
}
ros::Subscriber sub = nh_.subscribe ( argv[4],1,caffeCallback );
delay_pub = nh_.advertise<lane_detection::Delay> ( "multilane_detection/Delay",100 );
ros::spin();
cv::destroyWindow ( OPENCV_WINDOW );
delete caffe_net;
return 0;
}
开发者ID:sameeptandon,项目名称:sail-car-log,代码行数:39,代码来源:MultiLaneDetectionNode.cpp
示例10: write
/**
動画ファイルに書き込み
*/
bool write(){
if( videoWriter.isOpened()){
cv::Size size = cv::Size(glutGet(GLUT_WINDOW_WIDTH),glutGet( GLUT_WINDOW_HEIGHT));
if(size.width == captureImage.cols && size.height == captureImage.rows){
#ifndef USE_TEXTURE_2D
glReadPixels(0,0, captureImage.cols,captureImage.rows,GL_RGB,GL_UNSIGNED_BYTE,captureImage.data);
#else
glCopyTexImage2D( GL_TEXTURE_2D,0,GL_RGB,0,0,captureImage.cols,captureImage.rows,0);
glGetTexImage(GL_TEXTURE_2D,0,GL_RGB,GL_UNSIGNED_BYTE,captureImage.data);
#endif
}
else{ //ウィンドウが拡大縮小されている場合
size.width -= size.width % 4; //4の倍数にする
cv::Mat temp(size,CV_8UC3);
#ifndef USE_TEXTURE_2D
glReadPixels(0,0, size.width,size.height,GL_RGB,GL_UNSIGNED_BYTE,temp.data);
#else
glCopyTexImage2D( GL_TEXTURE_2D,0,GL_RGB,0,0,size.width,size.height,0);
glGetTexImage(GL_TEXTURE_2D,0,GL_RGB,GL_UNSIGNED_BYTE,temp.data);
#endif
cv::resize(temp,captureImage,captureImage.size(),0.0,0.0,interpolation);
}
cvtColor(captureImage,captureImage,CV_RGB2BGR);
flip(captureImage,captureImage,0);
videoWriter << captureImage;
//char key = cv::waitKey(1);
//std::ostringstream oss;
//oss << name << count << ".bmp";
//if(key == 's'){
// cv::imwrite(oss.str(), captureImage);
// count++;
//}
return true;
}
else
return false;
}
开发者ID:hvrl,项目名称:SuperpixelSegmentation,代码行数:41,代码来源:GLCapture.hpp
示例11: main
int main(int argc,char **argv)
{
try
{
if ( readArguments (argc,argv)==false) return 0;
//parse arguments
TheBoardConfig.readFromFile(TheBoardConfigFile);
//read from camera or from file
if (TheInputVideo=="live") {
TheVideoCapturer.open(0);
waitTime=10;
}
else TheVideoCapturer.open(TheInputVideo);
//check video is open
if (!TheVideoCapturer.isOpened()) {
cerr<<"Could not open video"<<endl;
return -1;
}
//read first image to get the dimensions
TheVideoCapturer>>TheInputImage;
//Open outputvideo
if ( TheOutVideoFilePath!="")
VWriter.open(TheOutVideoFilePath,CV_FOURCC('M','J','P','G'),15,TheInputImage.size());
//read camera parameters if passed
if (TheIntrinsicFile!="") {
TheCameraParameters.readFromXMLFile(TheIntrinsicFile);
TheCameraParameters.resize(TheInputImage.size());
}
//Create gui
cv::namedWindow("thres",1);
cv::namedWindow("in",1);
TheBoardDetector.setParams(TheBoardConfig,TheCameraParameters,TheMarkerSize);
TheBoardDetector.getMarkerDetector().getThresholdParams( ThresParam1,ThresParam2);
TheBoardDetector.getMarkerDetector().enableErosion(true);//for chessboards
iThresParam1=ThresParam1;
iThresParam2=ThresParam2;
cv::createTrackbar("ThresParam1", "in",&iThresParam1, 13, cvTackBarEvents);
cv::createTrackbar("ThresParam2", "in",&iThresParam2, 13, cvTackBarEvents);
char key=0;
int index=0;
//capture until press ESC or until the end of the video
while ( key!=27 && TheVideoCapturer.grab())
{
TheVideoCapturer.retrieve( TheInputImage);
TheInputImage.copyTo(TheInputImageCopy);
index++; //number of images captured
double tick = (double)getTickCount();//for checking the speed
//Detection of the board
float probDetect=TheBoardDetector.detect(TheInputImage);
//chekc the speed by calculating the mean speed of all iterations
AvrgTime.first+=((double)getTickCount()-tick)/getTickFrequency();
AvrgTime.second++;
cout<<"Time detection="<<1000*AvrgTime.first/AvrgTime.second<<" milliseconds"<<endl;
//print marker borders
for (unsigned int i=0;i<TheBoardDetector.getDetectedMarkers().size();i++)
TheBoardDetector.getDetectedMarkers()[i].draw(TheInputImageCopy,Scalar(0,0,255),1);
//print board
if (TheCameraParameters.isValid()) {
if ( probDetect>0.2) {
CvDrawingUtils::draw3dAxis( TheInputImageCopy,TheBoardDetector.getDetectedBoard(),TheCameraParameters);
//draw3dBoardCube( TheInputImageCopy,TheBoardDetected,TheIntriscCameraMatrix,TheDistorsionCameraParams);
}
}
//DONE! Easy, right?
//show input with augmented information and the thresholded image
cv::imshow("in",TheInputImageCopy);
cv::imshow("thres",TheBoardDetector.getMarkerDetector().getThresholdedImage());
//write to video if required
if ( TheOutVideoFilePath!="") {
//create a beautiful compiosed image showing the thresholded
//first create a small version of the thresholded image
cv::Mat smallThres;
cv::resize( TheBoardDetector.getMarkerDetector().getThresholdedImage(),smallThres,cvSize(TheInputImageCopy.cols/3,TheInputImageCopy.rows/3));
cv::Mat small3C;
cv::cvtColor(smallThres,small3C,CV_GRAY2BGR);
cv::Mat roi=TheInputImageCopy(cv::Rect(0,0,TheInputImageCopy.cols/3,TheInputImageCopy.rows/3));
small3C.copyTo(roi);
VWriter<<TheInputImageCopy;
// cv::imshow("TheInputImageCopy",TheInputImageCopy);
}
key=cv::waitKey(waitTime);//wait for key to be pressed
processKey(key);
}
} catch (std::exception &ex)
{
cout<<"Exception :"<<ex.what()<<endl;
}
//.........这里部分代码省略.........
开发者ID:brianlu365,项目名称:senior-design-2012,代码行数:101,代码来源:aruco_test_board.cpp
示例12:
~GLCapture(){
videoWriter.release();
}
开发者ID:hvrl,项目名称:SuperpixelSegmentation,代码行数:3,代码来源:GLCapture.hpp
示例13: run
void run() override
{
buf.lock();
unsigned int sz=buf.size(); //!!! access to size must be protected: problem spotted with Linux stl
buf.unlock();
// each 10 seconds it issues a writeToDisk command straightaway
bool writeToDisk=false;
double curTime=Time::now();
if ((curTime-oldTime>10.0) || closing)
{
writeToDisk=sz>0;
oldTime=curTime;
}
// it performs the writeToDisk on command or as soon as
// the queue size is greater than the given threshold
if ((sz>blockSize) || writeToDisk)
{
#ifdef ADD_VIDEO
// extract images parameters just once
if (doImgParamsExtraction && (sz>1))
{
buf.lock();
DumpItem itemFront=buf.front();
DumpItem itemEnd=buf.back();
buf.unlock();
int fps;
int frameW=((IplImage*)itemEnd.obj->getPtr())->width;
int frameH=((IplImage*)itemEnd.obj->getPtr())->height;
t0=itemFront.timeStamp.getStamp();
double dt=itemEnd.timeStamp.getStamp()-t0;
if (dt<=0.0)
fps=25; // default
else
fps=int(double(sz-1)/dt);
videoWriter.open(videoFile.c_str(),CV_FOURCC('H','F','Y','U'),
fps,cvSize(frameW,frameH),true);
doImgParamsExtraction=false;
doSaveFrame=true;
}
#endif
// save to disk
for (unsigned int i=0; i<sz; i++)
{
buf.lock();
DumpItem item=buf.front();
buf.pop_front();
buf.unlock();
fdata << item.seqNumber << ' ' << item.timeStamp.getString() << ' ';
if (saveData)
fdata << item.obj->toFile(dirName,counter++) << endl;
else
{
ostringstream frame;
frame << "frame_" << setw(8) << setfill('0') << counter++;
fdata << frame.str() << endl;
}
#ifdef ADD_VIDEO
if (doSaveFrame)
{
cv::Mat img=cv::cvarrToMat((IplImage*)item.obj->getPtr());
videoWriter<<img;
// write the timecode of the frame
int dt=(int)(1000.0*(item.timeStamp.getStamp()-t0));
ftimecodes << dt << endl;
}
#endif
delete item.obj;
}
cumulSize+=sz;
yInfo() << sz << " items stored [cumul #: " << cumulSize << "]";
}
}
开发者ID:robotology,项目名称:yarp,代码行数:84,代码来源:main.cpp
注:本文中的cv::VideoWriter类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论