2015-02-16 4 views
1

Я знаю, что есть много подобных вопросов, вроде этого, хотя по какой-то причине я не могу найти то, что ищу. Мне нужно взять значения RGB (BGR в Open_cv). То, что я пробовал, и я верю, ошибочно (потому что одно случайное значение пикселя jpeg-изображения с инструментом дроппера глаза обнаружило значения, которые никогда не появлялись в моей программе). Код:OpenCV принимает значения цвета пикселя

 cv::Vec3b intensity; 
     intensity = img1.at<cv::Vec3b>(i, j); 
     blue1 = intensity.val[0]; 
     green1 = intensity.val[1]; 
     red1 = intensity.val[2]; 
+1

«Принимая одно случайное значение пикселя jpeg» - jpg является потерянным, предпочитает BMP или ppm изображения для подобных экспериментов. – berak

ответ

1

Ваша функция является правильным. Просто проверьте, что вы не получаете, например, i,j обменивается. Первым индексом является строка . См. Пример here.

Еще одна вещь, чтобы проверить: какой тип синего1, зеленый1, красный1? Должно быть unsigned char, a.k.a. uint8_t, или эквивалент. И вы должны быть осторожны, если вы это сделаете, о том, как вы печатаете значения на std::cout (нужен листинг int).

+0

@ S11 Рад, что это помогло, в чем проблема? – Antonio

-1

Я рекомендую вам

cv::Mat image; //Some image 
uint8_t r,g,b; 
if (image.channels() == 1) { // gray-level image 
g=image.at<uchar>(j,i); 
} else if (image.channels() == 3) { // RGB color image 
r=image.at<cv::Vec3b>(j,i)[0];//R 
b=image.at<cv::Vec3b>(j,i)[1];//B 
g=image.at<cv::Vec3b>(j,i)[2];//G 
} 

все лучшее

+0

Это * установка * пиксельные значения !! И, по крайней мере, в комментариях, вы поменяли местами R и B (в соответствии с использованием OpenCV) – Antonio

+0

, а затем просто поменяйте местами слева и справа и замените число на переменные .... как сделано в исправленной версии .... – nico