2016-08-25 220 views
0

我使用此代碼打印OpenCV Mat像素的強度。但是,我正在控制檯上打印字符而不是0和250之間的值:如何獲取圖像中像素的顏色(加載灰色)?

image1 = imread(nameJpg, 0); 
image2 = imread(lastJpg, 0); 
for (int j = 0; j < image1.rows-10; j += 1){ 
    for (int i = 0; i < image1.cols-10; i += 1) { 
     std::cout << "" << image1.at<uchar>(i, j) << " " <<i mage1.at<uchar>(i, j)<<"\n"; 
    } 
} 

我該如何解決此問題?

+0

向我們展示您作爲[mcve]試用過的產品。 –

+0

圖片1和圖片2的尺寸是否相同? –

+0

是的。相同的尺寸。 –

回答

2

你想將它轉換成int,如:

(int)image.at<uchar>(i, j)

您可以參照ASCII table進行測試。

編輯

你提的這個bug的來源是你如何訪問像素。我應該爲行,j爲列。

for (int i = 0; i < src.rows; i++) { 
    for (int j = 0; j < src.cols; j++) 
     cout << (int)src.at<uchar>(i, j) << " "; 
    cout << endl; 
} 
0

在灰度圖像,像素強度爲0 255 250不

之間。如果你的意思是你想獲得一定的像素值,你可以使用這個:

auto image=cv::imread(path,CV_LOAD_IMAGE_GRAYSCALE); 
auto pixel_value=image.at<uchar>(row_idx,col_idx); 

OP的編輯後:

如果你想獲得數而不是字符的打印時,使用它代替:

auto pixel_value= static_cast<unsigned int>(image.at<uchar>(row_idx,col_idx)); 
+0

它給我的錯誤:語法錯誤:標識符'unsienged' –

+0

也許沒有正確的包括我?包括什麼? –

+1

「unsienged」是一個錯字..它是「未簽名」 –