在OpenCV中将rgb视频转换为灰度
我有一个将rgb视频转换为灰度的程序:在OpenCV中将rgb视频转换为灰度,opencv,video,rgb,grayscale,Opencv,Video,Rgb,Grayscale,我有一个将rgb视频转换为灰度的程序: CvCapture* capture = 0; capture = cvCreateFileCapture( "sample.avi" ); if(!capture) { return -1; } IplImage *bgr_frame=cvQueryFrame(capture);//Init the video read double fps = cvGetCaptureProperty (capture,CV_CAP_PROP_FPS); C
CvCapture* capture = 0;
capture = cvCreateFileCapture( "sample.avi" );
if(!capture)
{
return -1;
}
IplImage *bgr_frame=cvQueryFrame(capture);//Init the video read
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));
CvVideoWriter *writer = cvCreateVideoWriter("izlaz.avi",CV_FOURCC_DEFAULT,fps,size);
IplImage *grayScaleImage = cvCreateImage(size ,IPL_DEPTH_8U,1);
while( (bgr_frame=cvQueryFrame(capture)) != NULL )
{
cvCvtColor(bgr_frame, grayScaleImage, CV_BGR2GRAY);
cvWriteFrame( writer, grayScaleImage );
}
cvReleaseVideoWriter( &writer );
cvReleaseCapture( &capture );
事实并非如此。有谁能帮我修改一下,让它能正常工作吗?谢谢:)我想您需要在编解码器的fourcc和CV_fourcc_默认值之间进行选择,因为我无法使用。我试过CV_FOURCC('P','I','M','1')和CV_FOURCC('M','J','P','G')。他们都为我工作 这是我试过的示例代码
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
int main(int argc, char*argv[])
{
char *my_file = "C:\\vid_an2\\Wildlife.wmv";
std::cout<<"Video File "<<my_file<<std::endl;
cv::VideoCapture input_video;
if(input_video.open(my_file))
{
std::cout<<"Video file open "<<std::endl;
}
else
{
std::cout<<"Not able to Video file open "<<std::endl;
}
int fps = input_video.get(CV_CAP_PROP_FPS);
int frameCount = input_video.get(CV_CAP_PROP_FRAME_COUNT);
double fheight = input_video.get(CV_CAP_PROP_FRAME_HEIGHT);
double fwidth = input_video.get(CV_CAP_PROP_FRAME_WIDTH);
CvSize fsize;
fsize.width = fwidth;
fsize.height = fheight;
CvVideoWriter *new_writer = cvCreateVideoWriter("brg_file.avi",CV_FOURCC('M','J','P','G'), fps,fsize, 0);
std::cout<<"Video Frame Rate "<<fps<<std::endl;
std::cout<<"Video Frame Count "<<frameCount<<std::endl;
Mat cap_img;
Mat gry_img;
IplImage new_img;
while(input_video.grab())
{
if(input_video.retrieve(cap_img))
{
cvtColor(cap_img, gry_img, CV_RGB2GRAY);
new_img = gry_img.operator IplImage();
int ret = cvWriteFrame(new_writer, (const IplImage*)&new_img);
std::cout<<"Wrote Frame "<<ret<<std::endl;
}
}
cvReleaseVideoWriter(&new_writer);
return 0;
}
#包括
#包括
使用名称空间cv;
int main(int argc,char*argv[])
{
char*my\u file=“C:\\vid\u an2\\wildives.wmv”;
标准::cout@AlexSmith我尝试了该代码,但它不起作用。输出视频只是旋转和奇怪:)tnx@praks411用于您的代码:)但我做错了什么。尝试了所有操作,但仍然不起作用。:sw您面临的问题是什么?如果图像旋转,请尝试使用cvFlip api。在每帧写入waitKey(200)后也添加一些延迟某物