学习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的,刚开始学,很多不懂的,还望各位读者不吝赐教!!
#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的,刚开始学,很多不懂的,还望各位读者不吝赐教!!
相关文章推荐
- 从代码都发布遇到的问题总结(C#调用非托管dll文件,部署项目)
- 开发中遇到的问题及解决方案总结一
- ArcSDE 10 for Microsoft SQL Server 2008安装以及导入数据遇到的问题总结
- 从代码都发布遇到的问题总结(C#调用非托管dll文件,部署项目) 转
- 调试dijkstra代码遇到的问题(总结)
- 用Entities Framework实现代码优先和依赖注入所遇到的问题总结
- ubifs文件系统的制作过程&&遇到的问题及解决方案总结---之二“Linux内核中添加对UBIFS文件系统的支持”
- 维翔主机asp主机使用遇到的问题及解决方案总结
- C#调用C++代码遇到的问题总结
- 总结Nginx 的使用过程中遇到的问题及解决方案
- ios系统10 及 xcode8 项目适配遇到问题总结
- 在使用Struts的过程中也遇到了一些问题,现在总结一下
- 书上的代码总觉得有点问题
- Java转iOS-第一个项目总结(2):遇到问题和解决方案
- 使用VS2010时遇到的一些小问题的解决方案(从各处搜罗总结的,不定期更新,向原作者致敬)
- 发锁事务重试机制(JPA高并发下的乐观锁异常)总结,以及中间遇到各种问题和解决方案
- ubifs文件系统的制作过程&&遇到的问题及解决方案总结---之三“UBIFS镜像的制作&&烧写”
- Java转iOS-第一个项目总结(2):遇到问题和解决方案
- wifi无线网卡(zd1211b芯片)移植到mini2440全过程(二)遇到的问题总结&&解决方案
- ArcSDE 10 for Microsoft SQL Server 2008安装以及导入数据遇到的问题总结