OpenCV: как добавить искусственные эффекты размытия / размытия движения к целому изображению?

Я хотел бы добавить к изображениям с OpenCV искусственные эффекты размытия / размытия в определенном направлении, чтобы имитировать размытие, вызванное дрожанием / движением камер во время записи изображений.

Что было бы подходящим способом сделать это в OpenCV (с Python)?

Пример изображения:

введите описание изображения здесь

1 ответ

Чтобы достичь этого эффекта, вы сворачиваете изображение с ядром, подобным линейному сегменту (или PSF, функцией распределения точек), например так:

      img = cv2.imread("Lenna.png")

psf = np.zeros((50, 50, 3))
psf = cv2.ellipse(psf, 
                  (25, 25), # center
                  (22, 0), # axes -- 22 for blur length, 0 for thin PSF 
                  15, # angle of motion in degrees
                  0, 360, # ful ellipse, not an arc
                  (1, 1, 1), # white color
                  thickness=-1) # filled

psf /= psf[:,:,0].sum() # normalize by sum of one channel 
                        # since channels are processed independently

imfilt = cv2.filter2D(img, -1, psf)

Чтобы быть более реалистичным, вам нужно выполнить размытие в линейной области (т.е. инвертировать, а затем повторно применить гамму sRGB, см. здесь , это целая еще одна банка червей), но этот простой код дает вам следующее:

Источник:

Результат:

Другие вопросы по тегам