2011-11-17 49 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,您將得到剪輯的秒數。

相關問題