读入一个彩色视频文件并以灰度格式输出这个视频文件

《学习opencv》这本书中,有一个“读入一个彩色视频文件并以灰度格式输出这个视频文件”的代码,经测试,并不能得到想要的结果,出现错误的主要有:

1.书上的图像是极坐标下的,没有将其返回为二维下。

2.书上并没有对图像进行灰度处理。



/***************************************************************************************
*
* 内容摘要: Opencv 2 练习 代码整理
* 作    者: 夜寒知
* 完成日期: 2018.4.26
* 参考资料: 学习OpenCV 
*
****************************************************************************************/

int main()
{
	CvCapture *capture = 0;
	capture = cvCreateFileCapture("G:/1.avi");
	if (!capture)
	{
		return -1;
	}
	IplImage *bgr_frame = cvQueryFrame(capture);//从摄像头或者文件中抓取并返回一帧
	double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);//获得视频的属性,帧率
	cv::Size size = cvSize((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),
		(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));
	
	CvVideoWriter *writer = cvCreateVideoWriter("G:/3.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size);
	IplImage *logpolar_frame = cvCreateImage(size,IPL_DEPTH_8U,3);
	
	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);//彩色转换为灰度图像  
		cvConvertImage(bgr_frame, logpolar_frame, CV_RGB2GRAY);//彩色转换为灰度图像  
		
		cvFlip(logpolar_frame, NULL, 0);//翻转图像  
		cvWriteFrame(writer, logpolar_frame);
	}

	

	return 0;
}

错误解释:


1.

cvLogPolar是将图像转换为极坐标下的形式,在这个代码中我们并不需要转换极坐标形式。

2.

cvCvtColor(bgr_frame, logpolar_frame, CV_RGB2GRAY);//彩色转换为灰度图像 

该转换函数经测试在我使用的VS中并不能跑起来,会一直报错。

将函数换为另一种转换函数后,即可解决。

cvConvertImage(bgr_frame, logpolar_frame, CV_RGB2GRAY);//彩色转换为灰度图像 

3.

因为我们在进行了灰度处理后,不知为何视频是上下颠倒的,所以我们需要将其翻转。

cvFlip(logpolar_frame, NULL, 0);//翻转图像  



处理结果:

原图像:


处理后:



半夜做这个,看到灰度图,有点怕怕的QAQ



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值