当前位置 博文首页 > 无水wangyang:读入一个彩色视频文件并以灰度格式输出这个视频文

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

    作者:[db:作者] 时间:2021-09-06 13:32

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



    cs
    下一篇:没有了