level 2
柒小衰_silence
楼主
#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char** argv)
{
//声明IplImage指针
IplImage* pFrame = NULL;
IplImage* img;
//获取摄像头
CvCapture* pCapture = cvCreateCameraCapture(0);
//创建窗口
CvVideoWriter *writer_normal = NULL;
CvVideoWriter *writer_change = NULL;
int isColor = 1;
int fps = 25; // or 30
int frameW = 640; //
int frameH = 480;
//writer_normal = cvCreateVideoWriter("out_normal.avi", CV_FOURCC('X', 'V', 'I', 'D'), fps, cvSize(frameW, frameH), isColor);
//writer_change = cvCreateVideoWriter("out_change.avi", CV_FOURCC('X', 'V', 'I', 'D'), fps, cvSize(frameW, frameH), isColor);
writer_normal = cvCreateVideoWriter("out_normal.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, cvSize(frameW, frameH), isColor);
writer_change = cvCreateVideoWriter("out_change.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, cvSize(frameW, frameH), isColor);
//显示视屏
while (1)
{
pFrame = cvQueryFrame(pCapture);
cvShowImage("normal", pFrame);
cvGrabFrame(pCapture); // capture a frame
img = cvRetrieveFrame(pCapture); // retrieve the captured frame
cvWriteFrame(writer_normal, img);
// img = &IplImage(*pFrame);
IplImage * src = cvCreateImage(cvGetSize(img), 8, 1);
cvCvtColor(img, src, CV_BGR2GRAY);
IplImage *dst = cvCreateImage(cvGetSize(src), 8, 1);
IplImage *color_dst = cvCreateImage(cvGetSize(src), 8, 3);
cvCanny(src, dst, 50, 200, 3);
cvCvtColor(dst, color_dst, CV_GRAY2BGR);
CvMemStorage *storage = cvCreateMemStorage();
CvSeq *lines = 0;
lines = cvHoughLines2(dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI / 180, 80, 30, 5);
cvShowImage("change", dst);
cvWriteFrame(writer_change, dst); // add the frame to the file
waitKey(200);
}
cvReleaseImage(&pFrame);
cvReleaseImage(&img);
cvReleaseVideoWriter(&writer_normal);
cvReleaseVideoWriter(&writer_change);
cvReleaseCapture(&pCapture);
cvDestroyWindow("video");
}
程序的意图是用摄像头录像,将录像经过边缘提取和霍夫变换后输入到视频文件中。
程序将保存两个视频文件,write_normal保存的是原始视频文件,write_change保存的是经过处理之后的视频文件。
程序可以实时显示出两种视频图像。
但是为什么第一个视频也就是 cvWriteFrame(writer_normal, img);输出的视频可以播放
经过处理后的视频 也就是cvWriteFrame(writer_change, img);输出的视频永远只有5KB。
求大神解答,不胜感激。
2016年07月21日 01点07分
1
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char** argv)
{
//声明IplImage指针
IplImage* pFrame = NULL;
IplImage* img;
//获取摄像头
CvCapture* pCapture = cvCreateCameraCapture(0);
//创建窗口
CvVideoWriter *writer_normal = NULL;
CvVideoWriter *writer_change = NULL;
int isColor = 1;
int fps = 25; // or 30
int frameW = 640; //
int frameH = 480;
//writer_normal = cvCreateVideoWriter("out_normal.avi", CV_FOURCC('X', 'V', 'I', 'D'), fps, cvSize(frameW, frameH), isColor);
//writer_change = cvCreateVideoWriter("out_change.avi", CV_FOURCC('X', 'V', 'I', 'D'), fps, cvSize(frameW, frameH), isColor);
writer_normal = cvCreateVideoWriter("out_normal.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, cvSize(frameW, frameH), isColor);
writer_change = cvCreateVideoWriter("out_change.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, cvSize(frameW, frameH), isColor);
//显示视屏
while (1)
{
pFrame = cvQueryFrame(pCapture);
cvShowImage("normal", pFrame);
cvGrabFrame(pCapture); // capture a frame
img = cvRetrieveFrame(pCapture); // retrieve the captured frame
cvWriteFrame(writer_normal, img);
// img = &IplImage(*pFrame);
IplImage * src = cvCreateImage(cvGetSize(img), 8, 1);
cvCvtColor(img, src, CV_BGR2GRAY);
IplImage *dst = cvCreateImage(cvGetSize(src), 8, 1);
IplImage *color_dst = cvCreateImage(cvGetSize(src), 8, 3);
cvCanny(src, dst, 50, 200, 3);
cvCvtColor(dst, color_dst, CV_GRAY2BGR);
CvMemStorage *storage = cvCreateMemStorage();
CvSeq *lines = 0;
lines = cvHoughLines2(dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI / 180, 80, 30, 5);
cvShowImage("change", dst);
cvWriteFrame(writer_change, dst); // add the frame to the file
waitKey(200);
}
cvReleaseImage(&pFrame);
cvReleaseImage(&img);
cvReleaseVideoWriter(&writer_normal);
cvReleaseVideoWriter(&writer_change);
cvReleaseCapture(&pCapture);
cvDestroyWindow("video");
}
程序的意图是用摄像头录像,将录像经过边缘提取和霍夫变换后输入到视频文件中。
程序将保存两个视频文件,write_normal保存的是原始视频文件,write_change保存的是经过处理之后的视频文件。
程序可以实时显示出两种视频图像。
但是为什么第一个视频也就是 cvWriteFrame(writer_normal, img);输出的视频可以播放
经过处理后的视频 也就是cvWriteFrame(writer_change, img);输出的视频永远只有5KB。
求大神解答,不胜感激。