2010-08-29 1 views
1

Пользователи OpenCV знают, что cvRemap используется для выполнения геометрических преобразований. Аргументы mapx и mapy представляют собой структуры данных, которые дают отображение информации в целевом изображении. Могу ли я создать две целые массивы, содержащие случайные значения от 1 до 1024 или от 1 до 768 , если я имею дело с изображениями (1024 X 768) А затем сделайте mapx и mapy присвоенными этими значениями? А затем использовать их в cvRemap()? Выполняет ли это задание или единственный способ использовать mapx и mapy получает значение, назначенное с помощью функции cvUndistortMap()? Я хочу знать, потому что хочу деформировать изображения. На всякий случай, чтобы сообщить вам, что я уже проверил Изучение OpenCV книги тоже.Может ли кто-нибудь объяснить cvRemap с кодом с использованием cvRemap в OpenCV?

ответ

1

Я использую cvR-карту для применения коррекции искажений. Часть map_x находится в разрешении изображения и сохраняет для каждого пикселя смещение x для применения, в то время как map_y - то же самое для y-offset.

в случае undistortion

# create map_x/map_y 
self.map_x = cvCreateImage(cvGetSize(self.image), IPL_DEPTH_32F, 1) 
self.map_y = cvCreateImage(cvGetSize(self.image), IPL_DEPTH_32F, 1) 
# I know the camera intrisic already so create a distortion map out 
# of it for each image pixel 
# this defined where each pixel has to go so the image is no longer 
# distorded 
cvInitUndistortMap(self.intrinsic, self.distortion, self.map_x, self.map_y) 
# later in the code: 
# "image_raw" is the distorted image, i want to store the undistorted into 
# "self.image" 
cvRemap(image_raw, self.image, self.map_x, self.map_y) 

Поэтому: значений map_x/map_y являются плавающей точкой и в разрешении изображения, как два изображения в 1024x768. Что происходит в cvRemap в основном что-то вроде

orig_pixel = input_image[x,y] 
new_x = map_x[x,y] 
new_y = map_y[x,y] 
output_image[new_x,new_y] = orig_pixel 

Какие геометрические преобразования вы хотите сделать с этим?

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