2013-02-12 74 views
4

例如,我有一個矩陣M的大小爲10x10,並且我有一個長度爲5的列矩陣ind
如何在C++中將A(ind,:)分配給新的矩陣B OpenCV的?在OpenCV中從矩陣訪問值

下面是我在Matlab怎麼辦:

A = [ 41  8 33 36 22 14 38 43 18  4 
    46 49  2  2 20 34 13 13 42  3 
    7 48 43 14 39 33 26 41 30 27 
    46 25 47  3 40  9 35 13 28 39 
    32 41 34  5 10  6 45 47 46 47 
    5  8 38 42 25 25 48 18 15  7 
    14 22 38 35 23 48 28 10 38 29 
    28 46 20 16 33 18  7 13 38 24 
    48 40 33 48 36 30  8 31 20  1 
    49 48  9  2 38 12 13 24 29 17] 

ind = [2; 8; 4; 6; 2] 

B = A(ind, :); 

B = [ 46 49  2  2 20 34 13 13 42  3 
    28 46 20 16 33 18  7 13 38 24 
    46 25 47  3 40  9 35 13 28 39 
    5  8 38 42 25 25 48 18 15  7 
    46 49  2  2 20 34 13 13 42  3] 

誰能告訴我如何與OpenCV的做到這一點在C++中不使用for循環

回答

4

沒有直接的方法來提取的隨機排序行/列而沒有以某種方式迭代。最簡單的方法是提取行並將它們逐個推入目標矩陣。鑑於你有你的矩陣A宣佈和其數據集:

cv::Mat B; 
B.push_back(A(cv::Range(2,3),cv::Range::all())); 
B.push_back(A(cv::Range(8,9),cv::Range::all())); 
B.push_back(A(cv::Range(4,5),cv::Range::all())); 
B.push_back(A(cv::Range(6,7),cv::Range::all())); 
B.push_back(A(cv::Range(2,3),cv::Range::all())); 

應該做你想做的。這使用超載的operator()(cv::rowRange, cv::colRange)來提取選定的行。

0

我不認爲這是可能的,如果沒有使用for循環,但最快的方法是使用memcpy。您可以看到完整的代碼here