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

《学习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



猜你喜欢

转载自blog.csdn.net/weixin_40874586/article/details/80087630
今日推荐