előfeltételek: OpenCV
a kamera szerves része számos területen, mint a robotika, űrkutatás, stb kamera játszik nagy szerepet. Segít megragadni minden egyes pillanatot, és sok elemzéshez hasznos. Annak érdekében, hogy a kamerát vizuális érzékelőként használhassuk, ismernünk kell a kamera paramétereit. A kamera kalibrálása nem más, mint a kamera paramétereinek becslése, a fényképezőgép paraméterei szükségesek a valós világ 3D-s pontja és a megfelelő 2D-vetítés (pixel) közötti pontos kapcsolat meghatározásához a kalibrált kamera által rögzített képen.
figyelembe kell vennünk mind a belső paramétereket, például a gyújtótávolságot, az optikai központot, mind a lencse radiális torzítási együtthatóit stb., és a külső paraméterek, mint a forgatás és fordítása a kamera tekintetében néhány valós koordináta-rendszer.
kötelező könyvtárak:
- az OpenCV könyvtár a Pythonban egy számítógépes látáskönyvtár, amelyet leginkább képfeldolgozásra, videófeldolgozásra és elemzésre, arcfelismerésre és felismerésre használnak.
- a Numpy egy általános célú tömbfeldolgozó csomag. Nagy teljesítményű többdimenziós tömbobjektumot és eszközöket biztosít ezeknek a tömböknek a kezeléséhez.
a kamera kalibrálása lépésről lépésre elvégezhető:
- 1. lépés: először határozza meg a 3D pontok valós koordinátáit a kockás minta ismert méretével.
- 2. lépés: Az ellenőrző tábla képének különböző nézőpontjai rögzítésre kerülnek.
- 3.lépés: a findChessboardCorners() egy olyan módszer az OpenCV-ben, amelyet pixelkoordináták (u, v) keresésére használnak minden egyes 3D-s ponthoz különböző képeken
- 4. lépés: Ezután a calibrateCamera() módszert használják a kamera paramétereinek megkeresésére.
ez lesz a számított (threedpoints, twodpoints, grayColor.alakzat, Nincs, Nincs) paraméterként és visszatérési listaként, amelynek elemei a kamera mátrixa, torzítási együtthatója, forgási vektorai és fordítási vektorai.
kamera mátrix segít átalakítani 3D objektumok pont 2D kép pont és a torzítási együttható visszaadja a helyzetét a kamera a világon, az értékek a forgatás és a fordítás Vektorok
az alábbiakban a teljes program a fenti megközelítés:
import
cv2
import
numpy as np
import
os
import
glob
CHECKERBOARD
=
(
6
,
9
)
criteria
=
(cv2.TERM_CRITERIA_EPS
+
cv2.TERM_CRITERIA_MAX_ITER,
30
,
0.001
)
threedpoints
=
twodpoints
=
objectp3d
=
np.zeros((
1
, CHECKERBOARD
*
CHECKERBOARD,
3
), np.float32)
objectp3d
=
np.mgrid,
0
:CHECKERBOARD].T.reshape(
-
1
,
2
)
prev_img_shape
=
None
images
=
glob.glob(
'*.jpg'
)
for
filename
in
images:
image
=
cv2.imread(filename)
grayColor
=
cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, corners
=
cv2.findChessboardCorners(
grayColor, CHECKERBOARD,
cv2.CALIB_CB_ADAPTIVE_THRESH
+
cv2.CALIB_CB_FAST_CHECK
+
cv2.CALIB_CB_NORMALIZE_IMAGE)
if
ret
=
=
True
:
threedpoints.append(objectp3d)
corners2
=
cv2.cornerSubPix(
grayColor, corners, (
11
,
11
), (
-
1
,
-
1
), criteria)
twodpoints.append(corners2)
image
=
cv2.drawChessboardCorners(image,
CHECKERBOARD,
corners2, ret)
cv2.imshow(
'img'
, image)
cv2.waitKey(
0
)
cv2.destroyAllWindows()
h, w
=
image.shape
ret, matrix, distortion, r_vecs, t_vecs
=
cv2.calibrateCamera(
threedpoints, twodpoints, grayColor.shape,
None
,
None
)
print
(
" Camera matrix:"
)
print
(matrix)
print
(
"\n Distortion coefficient:"
)
print
(distortion)
print
(
"\n Rotation Vectors:"
)
print
(r_vecs)
print
(
"\n Translation Vectors:"
)
print
(t_vecs)
Bemenet:
Kimenet:
Camera matrix: ] Distortion coefficient: ] Rotation Vectors: , , ]), array(, , ]), array(, , ])] Translation Vectors: , , ]), array(, , ]), array(, , ])]