2014-10-05 32 views
0

我開始學習OpenCV,並且在一些基本操作中遇到了一些麻煩。所以,如下我可以讀取視頻文件:OpenCV:獲取圖像數據作爲數組

cv::VideoCapture cap("media.avi"); 
cv::Mat imgNew; 
while (cap.read(imgNew)) { 
} 

現在,我有具有以下簽名另一功能:

template<class T> 
bool get_estimate(const T * image_data, int num_pixels) 

現在,這需要將圖像數據作爲類型的此線性陣列const T其中T在這種情況下可能是unsigned charnum_pixels是圖像中的像素數量。

有人可以告訴我如何使用這種方法cv::Mat類型。我希望有一些簡單的方法來獲取底層數組及其類型,而不需要將數據複製到臨時數組中,但我不確定。我總是可以假設正在讀取的視頻圖像總是轉換爲灰度。

+0

這是很相似? http://stackoverflow.com/questions/20980723/convert-mat-to-vector-float-and-vectorfloat-to-mat-in-opencv – 2014-10-06 05:26:56

+0

問題是,矩陣到數組的轉換是與複製。我想知道是否有辦法不復制。 – Luca 2014-10-06 07:53:18

回答

1

OpenCV中的Mat類有一個uchar *data成員,可用於訪問基礎數據。 OpenCV Mat.

Mat myImg;      //assume single channel 2D matrix. 
unsigned char *p; 
p = myImg.data; 
for(unsigned int i=0; i< myImg.cols*myImg.rows; i++) 
    std::cout<< p[i]; 

p[i]鑄造到合適的類型。

+0

謝謝!這正是我需要的。 – Luca 2014-10-06 11:34:19

相關問題