2012-07-17 37 views
2

的所有通道我有這樣創建的OpenCV的圖像:如何訪問OpenCV的圖像

cv::Mat img(XN_VGA_Y_RES, XN_VGA_X_RES, CV_64FC3, cv::Scalar(0)); 

我如何可以訪問其所有的像素?

我想:

for (int x=0; x < XN_VGA_X_RES; x++) { 
    for (int y=0; y < XN_VGA_Y_RES; y++) { 
     img.at<double>(y,x) = 1; 
    } 
} 

然而,當我這樣做,這樣,只有圖像的1/3是白色的。我猜這是因爲我的圖片中有3個頻道,但我怎樣才能訪問它們?我嘗試了各種東西,如img.at<double[3]>(y,x)img.at<cv::Vec3f>(y,x),但他們似乎沒有工作。

+0

Downvoter,解釋? – houbysoft 2012-07-17 18:35:22

+0

你也可以使用'img = 1',其結果與for循環相同 – Sam 2012-07-17 18:55:46

+0

@vasile:對,上面的代碼只是一個例子,我在實際中使用了不同於'1'的值。 – houbysoft 2012-07-17 21:22:31

回答

4

試試這個:

img.at<cv::Vec3d>(y, x)[0] = 1; 
img.at<cv::Vec3d>(y, x)[1] = 1; 
img.at<cv::Vec3d>(y, x)[2] = 1; 
+0

我不敢相信我嘗試過'Vec3f'而不是'Vec3d'! :) – houbysoft 2012-07-17 18:32:22