您的位置:首页 > 编程语言

学习Opencv中文版--例2--10,书上的代码有点问题,现在把遇到的问题及解决方案作总结

2018-01-18 19:25 281 查看
具体代码:
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv ) {
    CvCapture* capture = 0;
capture = cvCreateFileCapture( argv[1] );
if(!capture){
  return -1;
}

IplImage* bgr_frame = cvQueryFrame(capture);

double fps = cvGetCaptureProperty(
capture,
CV_CAP_PROP_FPS
);
CvSize size = cvSize(
(int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH),
        (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT)
);

//下面这部分困扰了我很久,首先是编解码器的格式,电脑上一定要有编解码器,没有也要下载一个,下载之后可以把CV_FOURCC('X','V','I','D'),换成-1,运行后会弹出压缩视频所用的解码器,可以检查有没有安装成功,我安装的是xvid解码器,还有一个是很容易忽视的就是cvCreateVideoWriter()的最后一个参数int is_color,如果不管它,默认是1,那么编码器希望得到彩色帧开始编码,而题目要求是读入彩色视频,并以灰度格式输出,所以is_color应设置为0
CvVideoWriter* writer = cvCreateVideoWriter(
argv[2],
CV_FOURCC('X','V','I','D'),
fps,
size,
0
);

//*******************************************************************************************************************************IplImage* logpolar_frame = cvCreateImage(
size,
IPL_DEPTH_8U,
1
);
//我把while中的一部分注释掉了,因为它实现的是将每一帧图像转到对数极坐标格式,应该说题目要求和书上的程序根本不是一回事,所以只要将每一帧彩色图片转化为灰色图片,然后将每一帧灰色图片保存到新视频文件就可以了
while( (bgr_frame=cvQueryFrame(capture))!=NULL ) {
/*cvLogPolar( bgr_frame, logpolar_frame,
cvPoint2D32f(bgr_frame->width /2,
bgr_frame->height/2),
40,
CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS );*/
cvCvtColor( bgr_frame,logpolar_frame,CV_RGB2GRAY);
            cvWriteFrame( writer, logpolar_frame );
}
cvReleaseVideoWriter( &writer );
cvReleaseImage( &logpolar_frame );
cvReleaseCapture( &capture );
return (0);
}

//我看了很多文章,用了他们的方法都没成功,都没有设置is_color的,刚开始学,很多不懂的,还望各位读者不吝赐教!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐