2016-08-25 2 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

do image 1 и 2 имеют одинаковый размер? –

+0

есть. тот же размер. –

ответ

2

Вы хотите, чтобы бросить его в целое, например:

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

Вы можете проверить это, обратившись к ASCII table.

Редактировать

Источник ошибки вы упоминая это от того, как вы получаете доступ к пикселю. я должен быть для строк и 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); 

После редактирования параметров порядка:

Если вы хотите, чтобы получить номер вместо символа во время печати, используйте вместо этого:

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

это дает мне ошибку: синтаксическая ошибка: идентификатор «unsienged» –

+0

, возможно, у меня не было правильного включения? что такое включение? –

+1

«unsienged» был опечаткой .. он «беззнаковый», –

Смежные вопросы