2017-05-04 3 views
0

J'essaie de ne pas distordre une image fisheye en utilisant OpenCV. Je l'ai déjà calibré la caméra, et obtenir aussi une image non déformée décent en utilisant le code suivant (je viens de poster la partie pertinente):Comment ne pas déformer une image fisheye recadrée en utilisant OpenCV

img = cv2.imread('img.jpeg') #image path of pic to distort 
h,w = img.shape[:2] 

Knew = cv2.fisheye.estimateNewCameraMatrixForUndistortRectify(K,D,(w,h),None) 
Knew[(0,1), (0,1)] = .3* Knew[(0,1), (0,1)] 

mapx, mapy = cv2.fisheye.initUndistortRectifyMap(K,D,None,Knew,(w,h),5) 
img_undistorted = cv2.remap(img, mapx, mapy, cv2.INTER_LINEAR) 

cv2.imshow('undistorted', img_undistorted) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Maintenant, je dois recadrer l'image fisheye comme ceci: Photo from wikipedia enter image description here

Ces photos sont seulement à des fins de démonstration. J'ai utilisé la fonction de cartographie d'un objectif fisheye pour déterminer le point où je recadrer sur le côté droit. Cependant, si j'utilise le même code que ci-dessus (et la même matrice de caméra), la sortie est une image déformée vraiment bizarre.

J'ai aussi pensé à d'abord ne pas déformer et ensuite recadrer, mais je ne suis pas capable de calculer exactement le point que je dois recadrer de cette façon. Je dois donc recadrer l'image en premier.

Alors, comment déformer correctement une image fisheye non recadrée symétriquement?

Répondre

0

Lorsque vous déplacez et rognez l'image, les paramètres d'étalonnage de la caméra de pêche ne correspondent pas à la nouvelle caméra.

Peut-être pourriez-vous essayer de rendre l'image symétrique en remplissant les valeurs zéro. Le but est de placer le point central des deux images à la même position.

Référence:

http://docs.opencv.org/3.0-beta/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#fisheye-estimatenewcameramatrixforundistortrectify

http://answers.opencv.org/question/64614/fisheyeundistortimage-doesnt-work-what-wrong-with-my-code/

+0

donc vous dire que je devrais recadrer l'image, mais sorte de "remplir" la région recadrée avec des pixels noirs? – sybilcut

+0

C'est quelque chose que j'essaierais. –

+0

Cela n'a pas fonctionné pour moi :(Je vais juste essayer d'autres paramètres alors ... – sybilcut