即使是彩色视频图像,nchannel()也始终返回1 我用Visual C++ 2008 Express编写OpenCV 2.1程序。我想得到每个像素的颜色数据,并按像素修改它们

即使是彩色视频图像,nchannel()也始终返回1 我用Visual C++ 2008 Express编写OpenCV 2.1程序。我想得到每个像素的颜色数据,并按像素修改它们,opencv,Opencv,我知道代码“frmSource.channels();”返回mat frmSource的颜色通道,但它始终返回1,即使它绝对是彩色视频图像,而不是3或4 我错了吗 如果我错了,请指导我如何获取每个像素的每个颜色分量数据 另外,通过“get(CV_CAP_PROP_frame_count)”得到的总帧数远大于我预期的帧数,因此我将“get(CV_CAP_PROP_frame_count)”除以get(CV_CAP_PROP_frame_rate),我可以得到我预期的结果 我知道画面就像电影的剪辑,

我知道代码“frmSource.channels();”返回mat frmSource的颜色通道,但它始终返回1,即使它绝对是彩色视频图像,而不是3或4

我错了吗

如果我错了,请指导我如何获取每个像素的每个颜色分量数据

另外,通过“get(CV_CAP_PROP_frame_count)”得到的总帧数远大于我预期的帧数,因此我将“get(CV_CAP_PROP_frame_count)”除以get(CV_CAP_PROP_frame_rate),我可以得到我预期的结果

我知道画面就像电影的剪辑,每秒30帧。是这样吗

我的编码如下:

void fEditMain()
{

VideoCapture vdoCap("C:/Users/Public/Videos/Sample Videos/WildlifeTest.wmv");

// this video file is provided in window7

if( !vdoCap.isOpened() ) 

{

    printf("failed to open!\n");

    return;

}

Mat frmSource;

vdoCap >> frmSource; 

if(! frmSource.data) return;


VideoWriter vdoRec(vRecFIleName, CV_FOURCC('W','M','V','1'), 30, frmSource.size(), true);

namedWindow("video",1);

// record video

int  vFrmCntNo=1;
for(;;)
{
    int vDepth = frmSource.depth();

    vChannel = frmSource.channels(); 

    // here! vChannel is always 1, i expect 3 or 4 because it is color image

    imshow("video", frmSource);// frmSource Show

    vdoRec << frmSource; 

    vdoCap >> frmSource;

    if(! frmSource.data) 

    return;
}        
return;
}
void fEditMain()
{
VideoCapture vdoCap(“C:/Users/Public/Videos/Sample Videos/WildlifeTest.wmv”);
//此视频文件在window7中提供
如果(!vdoCap.isOpened())
{
printf(“打开失败!\n”);
返回;
}
材料来源;
vdoCap>>frmSource;
如果(!frmSource.data)返回;
VideoWriter vdoRec(vRecFIleName,CV_FOURCC('W','M','V','1'),30,frmSource.size(),true);
namedWindow(“视频”,1);
//录制视频
int vFrmCntNo=1;
对于(;;)
{
int vDepth=frmSource.depth();
vChannel=frmSource.channels();
//这里!vChannel总是1,我希望是3或4,因为它是彩色图像
imshow(“视频”,frmSource);//frmSource Show
vdoRec>frmSource;
如果(!frmSource.data)
返回;
}        
返回;
}

我不确定这是否能回答您的问题,但如果您使用IplImage,则很容易获得正确数量的频道以及操作图像。尝试使用:

IplImage *frm = cvQueryFrame(cap);
int numOfChannels = channelfrm->nChannels;

视频由帧组成,您可以通过使用get(CV_CAP_PROP_FPS)知道每秒通过多少帧。如果你将帧数除以FPS,你将得到剪辑的秒数。

什么是
vChannel
?OpenCV在2.3.1版上!我强烈建议你更新你的版本。