2013-11-20 7 views
0

Я не понимаю, почему выход странное число, когда я запускаю мой код:Визуализация пикселя с OpenCV Мат на

int main(int argc, char** argv) 
{ 
    Mat im; 
    im = imread("lena.png", CV_LOAD_IMAGE_GRAYSCALE); 
    cout << im.at<uchar>(0, 0) << endl; 
    waitKey(0); 
} 

Если я представляю себе образ, который я вижу правильное изображение. Где я ошибаюсь?

ответ

3

Потому что он показывает символ, как cout << char(123) << endl;

Вы должны использовать Int ролях:

cout << (int) im.at<uchar>(0, 0) << endl; 
+0

Спасибо за ответ. Я еще не пробовал, но вижу очень большое число, а не число от 0 до 255. Я не понимаю, как это возможно. – Alessandro

+0

Извините, я ошибаюсь. С вашим предложением я получаю правильное значение. Большое вам спасибо. – Alessandro

+0

Если это помогает, подтвердите ответ. –

2

Как говорится в официальном documentation вам не получить фактическое значение интенсивности непосредственно, а скаляр.

Попробуйте это:

Scalar intensity = im.at<uchar>(0, 0); 

cout << intensity.val[0] << endl; 

и для изображений с более чем одним каналом вы можете использовать:

Vec3b intensity = im.at<Vec3b>(0, 0); 
cout << intensity.val[0] << intensity.val[1] << intensity.val[2] << endl; 
+0

С одним каналом это фактическая интенсивность. –

+0

Да, но только с одним каналом и в цветовом пространстве Grey/RGB (A). В целом это не так, и это то, что вы должны иметь в виду. – Mailerdaimon

+0

На самом деле, если интенсивность Vec3b, вы можете сделать это 'cout << интенсивность << endl' и получить что-то вроде' [255, 10, 22] ' – Bull

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