2013-07-04 6 views
2

this is my markerНахождение точных значений HSV цветов

Использование cvInRangeS(hsvframe,cvScalar(90, 40, 50) и cvScalar(255, 90, 255),threshy), как я могу получить точный диапазон значений для каждого цвета (фиолетовый и желтый)?

+0

Я уверен, что это в образце OpenCV, или учебник кода некоторые места. Маленькое приложение со слайдерами, с которыми вы сталкиваетесь, пока не найдете цвет, который вы ищете. – j0h

ответ

1

Используйте color picker web-site, чтобы узнать их значения.

http://www.color-hex.com/color/eca314

http://www.color-hex.com/color/923ca7

Обратите внимание, что вам нужно преобразовать угол цветового тона (0-360) между диапазоном (0-255). Используйте inranges функцию для обоих цветов и добавьте изображения:

cvInRangeS(hsvframe,cvScalar(20, 0, 0), cvScalar(30, 255, 255),threshorange); 
cvInRangeS(hsvframe,cvScalar(200, 0, 0), cvScalar(210, 255, 255),threshpurple); 
cvOr(threshorange, threshpurple, threshy); 
+0

даже диапазон, который вы мне дали, не работает ... – Lorenzo

+0

оранжевый: 12-25 фиолетовый: 143-162 попробуйте. – baci

1

Вы можете попробовать это:

Mat matSrcCopyForHSVColorDisplay, HSV_image_display; 

//Make a copy of the original image 
matSrcCopyForHSVColorDisplay = matSrc.clone(); 

//Convert RGB to HSV 
cvtColor(matSrc, HSV_image_display, CV_BGR2HSV); 

//To access each pixel in the images we are using this syntax: 
//image.at(y,x)[c] where y is the row, x is the column 
//and c is H, S or V (0, 1 or 2) 
Vec3b p = HSV_image_display.at<Vec3b>(50, 10); //Vec3b - Array of 3 uchar numbers 

//p[0] - H, p[1] - S, p[2] - V 
printf(text, "H=%d, S=%d, V=%d", p[0], p[1], p[2]); 

//putText(matSrcCopyForHSVColorDisplay, text, Font_Position, 
//Font_Type, Font_Scale, Font_Colour, Font_Thickness); 
//Display the text 
putText(matSrcCopyForHSVColorDisplay, text, center, 
     FONT_HERSHEY_COMPLEX_SMALL, 2, cvScalar(255, 0, 0), 1, CV_AA); 

//Refresh the image 
imshow("HSV Value", matSrcCopyForHSVColorDisplay); 
printf("H=%d, S=%d, V=%d\n", p[0], p[1], p[2]);