Получить маску изображения различий между двумя изображениями Emgu CV

#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, но никогда не использовал его сам.