Как создать этот баррель / радиальное искажение с Python OpenCV? - PullRequest
0 голосов
/ 10 марта 2020

Я делаю пользовательскую гарнитуру виртуальной реальности с кодом в python / opencv. Мне нужно иметь возможность искажать изображения, чтобы создать эффект «бочкообразного искажения» / «радиального искажения».

Некоторые изображения для объяснения:

enter image description here

enter image description here

enter image description here

У меня уже есть source_image, который я хочу использовать и показать на пользователь, и уже есть их бок о бок. Теперь мне просто нужно что-то вроде out = cv2.createBarrelDistortion(source_image, params). (и я не возражаю против возможности настройки нескольких параметров, таких как центр искажения, величина искажения и т. д. c, поэтому я могу сделать так, чтобы они выглядели правильно для любых пользовательских линз, которые я получаю.)

Любые помощь очень ценится!

1 Ответ

1 голос
/ 10 марта 2020

Вот как это сделать в Python Wand 0.5.9

(http://docs.wand-py.org/en/0.5.9/index.html)


Ввод:

enter image description here

from wand.image import Image
import numpy as np
import cv2


with Image(filename='checks.png') as img:
    print(img.size)
    img.virtual_pixel = 'transparent'
    img.distort('barrel', (0.2, 0.0, 0.0, 1.0))
    img.save(filename='checks_barrel.png')
    # convert to opencv/numpy array format
    img_opencv = np.array(img)

# display result with opencv
cv2.imshow("BARREL", img_opencv)
cv2.waitKey(0)


Результат:

enter image description here

См. https://imagemagick.org/Usage/distorts/#barrel для того же примера и обсуждения аргументов.

См. https://hackaday.io/project/12384-autofan-automated-control-of-air-flow/log/41862-correcting-for-lens-distortions для подхода Python / OpenCV.

...