当前位置 博文首页 > 无水wangyang:读入一个彩色视频文件并以灰度格式输出这个视频文
《学习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