2011-11-17 50 views
1

我使用visual C++ 2008 express编写了opencv 2.1程序。我想获取每个像素的每个像素颜色数据并按像素修改它们。即使在彩色视频图像的情况下,nchannel()也会返回1 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; 
} 
+0

vChannel的类型是什么? – karlphillip

+0

OpenCV在版本2.3.1上!我强烈建议你更新你的版本。 – karlphillip

回答

0

我不知道这是否会回答你的问题,但如果你使用的IplImage这将是很容易得到渠道的正确数目以及处理图像。尝试使用:

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

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

相关问题