2013-09-24 65 views
0

即時通訊設法訪問和修改我讀入opencv的圖像的像素值。我讀了幾篇關於如何做到這一點的文章,但是,他們似乎不適合我。問題訪問/編輯Mat圖像中的像素位置

我的代碼:

int main() 
{ 
    Mat src=imread("/home/jaysinh/Pictures/shapes.jpg"); 
    cout<<"rows:"<<src.rows<<endl; 
    cout<<"cols:"<<src.cols<<endl; 
    cout<<src.at<cv::Vec3b>(10,10)[0]<<endl; 


    waitKey(0); 
    return 0; 
} 

給我的結果: enter image description here

在此圖像中我嘗試看看在圖像中的位置(10,10)的像素值。我試圖輸出圖像的所有值,但它們仍然看起來像特殊字符。

我也試過Scalar和unchar類型而不是Vec3b,但似乎沒有給我適當的值(0-255之間)。類型double爲每個像素位置提供了-NNN。我檢查了圖像的src.type(),返回16,我認爲這是16S類型。

如何修改圖像或以某種方式訪問​​此類圖像像素值並進行修改?

在此先感謝!

(這裏是圖像IM試圖訪問:enter image description here

回答

3

COUT解釋爲一個char的字節,並嘗試打印的東西ASCII;),所以只投爲int:

cout << int(src.at<Vec4b>(3,3)[0]) << endl; 
// 100 

或打印全像素:

cout << src.at<Vec4b>(3,3) << endl; 
// [100, 23, 90] 

是的,你可以操縱它:

Vec3b & pixel = src.at<Vec4b>(3,3); 
pixel[1] += 5; 
cout << src.at<Vec4b>(3,3) << endl; 
// [100, 28, 90] 
+0

幫助很多!謝謝! –