首页 > 编程知识 正文

opencv图像匹配,dsge模型百度百科

时间:2023-05-04 09:04:55 阅读:19628 作者:1191

在OpenCVSharp 4.5上向OpenCV官方教授安静的爆米花

原OpenCV官方教程链接:(今天链接失效了吗? ) Demo 1

用户系统; using system.collections.generic; using OpenCvSharp; namespaceconsoleapp1{ class tutorial 52: itutorial { enum pattern { chess board,CIRCLES_GRID, asymmetric _ circles _ grid } privatevoidcalcchessboard ] corners (sizeboardsize,float squareSize,out完美雁) corners,patatt 交换机(pattern type ) case pattern.chess board : case pattern.circles _ grid ://! [计算机- chess board-object-points ] for (inti=0; i boardSize.Height; I ) for(intj=0; j boardSize.Width; j ) Corners_list.add(newpoint3f () float ) ) squaresize (,float ) ) i * squareSize (,0 ) ); //! [ compute-chess board-object-points ] break; case pattern.asymmetric _ circles _ grid : for (inti=0; i boardSize.Height; I ) for(intj=0; j boardSize.Width; j ) corners _ list.add (new point 3f (float ) ) jI%2) * squareSize ),() float ) ) i * squareSize ),0 ); 布雷克; default: Console .甜外套(Unknown pattern typejsdlzn ); 布雷克; } corners=corners_list.ToArray (; }专用imgpath、string intrinsicsPath、Size patternSize、float squareSize //! [ find-chess board-corners ] point 2f [ ] corners; bool found=cv2.findchessboardcorners (img,patternSize,out corners ); //! [ find-chess board-corners ] if (found==false ) { Console .甜外套) ' Cannot find chessboard corners.' ); 返回; } cv2.drawchessboardcorners (img _ corners,patternSize,corners,found ); cv2.im show (' chessboardcornersdetection ',img_corners );

//! [compute-object-points] 完美的大雁] objectPoints; calcChessboardCorners(patternSize, squareSize, out objectPoints); Point2d[] objectPointsPlanar = new Point2d[objectPoints.Length]; for (int i = 0; i < objectPoints.Length; i++) { objectPointsPlanar[i] = (new Point2d(objectPoints[i].Item0, objectPoints[i].Item1)); } //! [compute-object-points] //! [load-intrinsics] Mat cameraMatrix = new Mat(3, 3, MatType.CV_64F, new Double[9] { 5.3591573396163199e+02, 0.0 , 3.4228315473308373e+02 , 0.0, 5.3591573396163199e+02, 2.3557082909788173e+02 , 0.0,0.0, 1.0}); Mat distCoeffs = new Mat(5, 1, MatType.CV_64F, new Double[5] { -2.6637260909660682e-01, -3.8588898922304653e-02, 1.7831947042852964e-03, -2.8122100441115472e-04, 2.3839153080878486e-01 }); //! [load-intrinsics] //! [compute-image-points] Mat imagePoints = new Mat(); Mat corners_mat = Mat.FromArray<Point2f>(corners); Cv2.UndistortPoints(corners_mat, imagePoints, cameraMatrix, distCoeffs); //! [compute-image-points] //! [estimate-homography] Mat objectPointsPlannar_mat = Mat.FromArray<Point2d>(objectPointsPlanar); Mat H = Cv2.FindHomography(objectPointsPlannar_mat, imagePoints, HomographyMethods.None); Console.甜甜的外套("H:jsdlzn{0}", Cv2.Format(H)); //! [estimate-homography] //! [pose-from-homography] // Normalization to ensure that ||c1|| = 1 double 轻松的小海豚 = Math.Sqrt(H.At<double>(0, 0) * H.At<double>(0, 0) + H.At<double>(1, 0) * H.At<double>(1, 0) + H.At<double>(2, 0) * H.At<double>(2, 0)); H /= 轻松的小海豚; Mat c1 = H.Col(0); Mat c2 = H.Col(1); Mat c3 = c1.Cross(c2); Mat tvec = H.Col(2); Mat R = new Mat(3, 3, MatType.CV_64F); for (int i = 0; i < 3; i++) { R.At<double>(i, 0) = c1.At<double>(i, 0); R.At<double>(i, 1) = c2.At<double>(i, 0); R.At<double>(i, 2) = c3.At<double>(i, 0); } //! [pose-from-homography] //! [polar-decomposition-of-the-rotation-matrix] Console.甜甜的外套("R (before polar decomposition):jsdlzn{0}jsdlzndet(R):{1}", Cv2.Format(R), Cv2.Format(Cv2.Determinant(R))); Mat W = new Mat(); Mat U = new Mat(); Mat Vt = new Mat(); Cv2.SVDecomp(R, W, U, Vt); R = U * Vt; Console.甜甜的外套("R (after polar decomposition):jsdlzn{0}jsdlzndet(R):{1}", Cv2.Format(R), Cv2.Format(Cv2.Determinant(R))); //! [polar-decomposition-of-the-rotation-matrix] //! [display-pose] Mat rvec = new Mat(); Cv2.Rodrigues(R, rvec); Cv2.DrawFrameAxes(img_pose, cameraMatrix, distCoeffs, rvec, tvec, 2 * squareSize); Cv2.ImShow("Pose from coplanar points", img_pose); Cv2.WaitKey(); //! [display-pose] } public void Run() { int width = 9; int height = 6; float squareSize = 0.025f; string imagePath = @"I:jsdlzcsharpjsdlzimagesjsdlzleft04.jpg"; string intrinsicsPath = @"jsdlzI:jsdlzchsarpjsdlzimagesjsdlzleft_intrinsics.yml"; Size patternSize = new Size(width, height); poseEstimationFromCoplanarPoints(imagePath, intrinsicsPath, patternSize, squareSize); return; } }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。