2015-01-12 122 views
0
的偶數行的副本

我想獲得3個通道的墊子,這樣的東西的偶數行/的cols:的OpenCV獲得墊

A = 1 0 1 0 1 0 
    1 0 1 0 1 0 
    1 0 1 0 1 0 

result = 1 1 1 
     1 1 1 

如何我能做到這一點使用OpenCV的?

在此先感謝。

編輯:

這裏是我使用的代碼:

Mat img_object = imread(patternImageName); 
Mat a; 
for (int index = 0,j = 0; index < img_object.rows; index = index + 2, j++) 
{ 
    a.row(j) = img_object.row(index); 
} 

但它拋出以下異常:

OpenCV Error: Assertion failed (m.dims >= 2) in Mat, file /build/buildd/opencv-2.4.8+dfsg1/modules/core/src/matrix.cpp, line 269 
terminate called after throwing an instance of 'cv::Exception' 

回答

-1

我終於可以做到這一點。下面是解

Mat img_object = imread(patternImageName); 
Mat B; 
for (int i = 0; i < img_object.cols; i += 2) 
{ 
    B.push_back(img_object.col(i)); 
} 
// now we got 1 large 1d flat (column) array with all the collected elements, 
B = B.reshape(0,(img_object.cols/2));// 1 elem per channel, 3 rows. 
B = B.t();   // transpose it 
Mat result; 
for (int i = 0; i < B.rows; i += 2) 
{ 
    result.push_back(B.row(i)); 
} 
0
int j = 0; 
for (int i = 0; i< A.size(); i+2) 
{ 
    destMat.row(j) = (A.row(i)); 
    j++; 
} 
+0

j的效用是什麼?以及爲什麼我們將0添加到A.row(i)? – Maystro

+0

不知道+0,我把它從別的東西上扯下來。 J在代碼更新中反映出來。這是爲索引destMat的行,因爲你不想增加2 – GPPK

+0

編輯的問題 – Maystro

1

可以濫用resize()功能:

resize(bigImage, smallImage, Size(), 0.5, 0.5, INTER_NEAREST); 

調整大小()函數將創建一個新的形象,其大小是原始圖像的一半。

INTER_NEAREST意味着小圖像的值將通過「最近鄰」方法計算。在這種特定情況下,這意味着小圖像中位置(1,2)處的像素值將從大圖像中位置(2,4)處的像素處獲取。

+0

我不想改變圖像中的任何東西,我只是想要圖像中的偶數行/列。 – Maystro

+0

這是調整大小。它創建的圖像只有偶數行和原始圖像的列。當然,這是濫用調整大小功能,因爲這不是它的原始目的,但如果這樣做的伎倆... –

+0

我試過了,它的工作。由於它比我的解決方案更容易,我會接受你的答案而不是我的答案。 – Maystro