2014-07-31 8 views
0

Используя OpenCV, я обнаруживаю лицо, обнаруживая левое и правое глаза этого лица и выделяя глаз в новое изображение Мата. Затем я преобразую цвет изображения глаз с BGR в HSV.OpenCV: изменить цвет пикселя

Я проверяю, имеет ли цвет глаз определенный диапазон, используя inRange(). Это отображает область глаза, которая красная (см. Ниже изображение).

Мой вопрос: Я хотел бы изменить цвет глаз (обнаружен с помощью InRange()) от красного до черного. Я не слишком уверен, куда идти отсюда.

Любая помощь приветствуется! Спасибо!


Текущий результат:

+1

преобразуйте вашу маску inRange в bgr, а bitwise_xor eye roi с маской – berak

+0

Спасибо @berak, дайте это. – LKB

ответ

1

вы можете сделать это следующим за петлю, если вы хотите, чтобы сделать глаз голубым, например

cv::Vec3b pixelColor(255,0,0); 
for(int y=0;y<img.rows;y++){ 
for(int x=0;x<img.cols;x++){ 
    cv::Point2f point(x, y); 
    if (mask.at<uchar>(point)) image.at<Vec3b>(cv::Point(x,y)) = pixelColor; 
} 
} 
+0

Спасибо за помощь, @ diip-thomas. Линия 'image.at (cv :: Point (x, y)) = pixelColor;' дает мне ошибку. – LKB

1

Вы уже маску, просто сделать цикл и установить пиксели черного цвета (.at = Vec3b (0,0,0), в BGR пространства, конечно), где маска 255.

+0

Спасибо @ james-harper. Я бы выполнил цикл for для строк и столбцов, а затем ... хорошо, я потерял себя сейчас, hah .. – LKB

+2

измените первую строку ответа diip_thomas на cv :: Vec3b pixelColor (0,0,0); Он смешал Скаляр и Вектор. Кроме того, вам не нужно специально определять Point2f, просто используйте на (y, x), (y, x). Потому что это рядовой. –

+0

Удивительный, это работает, спасибо @ james-harper! – LKB

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