#image-processing #opencv #webcam #masking #emgucv
#обработка изображений #opencv #Вебкам #маскирование #emgucv
Вопрос:
Мне было интересно, как взять два разных изображения серого цвета и создать маску различий между ними. Любая помощь была бы высоко оценена.
Ответ №1:
Предполагая, что камера неподвижна и изображения получаются очень хорошими, вы можете найти различия между двумя изображениями, используя поэлементное вычитание. Используя C API OpenCV, это выглядело бы примерно так (примечание: этот код не тестировался):
void FindDifference(cv::Mat src1, cv::Mat src2, cv::Mat amp;dst, int threshold) {
dst = cv::abs(src2 - src1);
cv::threshold(dst, dst, threshold, 255, cv::THRESH_BINARY);
}
Вы можете настроить значение threshold
, чтобы уменьшить количество ложных срабатываний, вызванных шумом. Если вы по-прежнему получаете слишком много ложных срабатываний, вам следует использовать look into для оценки движения и регистрации изображения, чтобы выровнять два изображения.
Я не знаком с API EmuCV, но перевести приведенный выше код в его вызовы API должно быть довольно просто.
Комментарии:
1. Большое вам спасибо. Это было чрезвычайно легко перевести, и это сработало в значительной степени так, как я этого хотел.
2. Не могли бы вы, пожалуйста, указать мне, как отслеживать глаза и обнаруживать моргания? Как использовать cv::findContours для получения подключенных компонентов?
3. Извините, но у меня нет никакого опыта в отслеживании глаз. Я слышал много хорошего об OpenGaze, но никогда не использовал его сам.