即使在彩色视频图像的情况下,nchannel()也总是返回1

时间:2011-11-17 08:57:45

标签: opencv

我用visual c ++ 2008 express编写了一个opencv 2.1程序。我想得到每个像素的每个像素颜色数据并按像素修改它们。

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

我错了吗?

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

此外,“get(CV_CAP_PROP_FRAME_COUNT)”的总帧数远远大于我预期的帧数,因此我将“get(CV_CAP_PROP_FRAME_COUNT)除以get(CV_CAP_PROP_FPS帧率。”),我可以得到结果正如我所料。

据我所知,这个画面就像一部电影剪辑,每秒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;
}

1 个答案:

答案 0 :(得分:0)

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

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

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