前言
之前用OpenCV做过摄像机标定及矫正,现在平台换了,改用C#,就用EmguCV做一下,其实就是OpenCV的C#版。
在EmguCV中有两类摄像机标定的类,一个是CvInvoke类,一个是CameraCalibration类,两种标定效果差不多,只不过CvInvoke涉及的函数大多都是指针类型的,而C#对于指针的操作比较麻烦。本文是在CameraCalibration类的基础上完成摄像机标定,用CvInvoke类完成矫正图像。
函数说明
1、角点检测
public static PointF[] FindChessboardCorners( Image<Gray, byte> image, Size patternSize, CALIB_CB_TYPE flags )
Parameters
-
image
- Type: Emgu.CV.Image<Gray, Byte>Source chessboard view
-
patternSize
- Type: System.Drawing.SizeThe number of inner corners per chessboard row and column
-
flags
- Type: Emgu.CV.CvEnum.CALIB_CB_TYPEVarious operation flags
Return Value
Type: PointF[]The corners detected if the chess board pattern is found, otherwise null is returned注:输入图像需是灰度图,检测之前角点需要开辟空间,如:
cornersDetected = new PointF[nPoints]; //nPoints表示单幅图像角点总数
cornersDetected = CameraCalibration.FindChessboardCorners(chessboardImage, patternSize,
CALIB_CB_TYPE.ADAPTIVE_THRESH | CALIB_CB_TYPE.NORMALIZE_IMAGE);