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:
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?
donc vous dire que je devrais recadrer l'image, mais sorte de "remplir" la région recadrée avec des pixels noirs? – sybilcut
C'est quelque chose que j'essaierais. –
Cela n'a pas fonctionné pour moi :(Je vais juste essayer d'autres paramètres alors ... – sybilcut