opencv4 角点检测

/************OpenCV4.3 Version*******************************/

	for (int i = 1; i <= 18; i++)

	{

		string filename = "D:/test1/" + to_string(i) + ".bmp";

		Mat image = imread(filename);

		vector<Point2f> corners;

		Mat  imageGray;

		cvtColor(image, imageGray, COLOR_BGR2GRAY);

		bool found;

		// 棋盘内部角点的数量
		cv::Size boardSize(7, 3);

		found = findChessboardCornersSB(image, boardSize, corners, CALIB_CB_EXHAUSTIVE | CALIB_CB_ACCURACY);

		std::vector<vector<Point2f>> image_points;
		std::vector<vector<Point3f>> object_points;

		float square_size = 30;

		if (found)

		{

			drawChessboardCorners(image, boardSize, Mat(corners), found);

			vector< Point3f > obj;

			for (int i = 0; i < boardSize.height; i++)

				for (int j = 0; j < boardSize.width; j++)

					obj.push_back(Point3f((float)j * square_size, (float)i * square_size, 0));

			if (found)

			{

				cout << i << ". Found corners!" << endl;

				image_points.push_back(corners);

				object_points.push_back(obj);

			}

		}



		cv::imshow("image", image);

		cv::waitKey(0);

	}
























/***************opencv3.4 Version*******************************/

	for (int i = 1; i <= 18; i++)

	{

		string filename = "D:/test1/" + to_string(i) + ".bmp";

		Mat image = imread(filename);

		vector<Point2f> corners;
		Mat imageGray;

		cvtColor(image, imageGray, COLOR_BGR2GRAY);

		bool found;

		
		// 棋盘内部角点的数量
		cv::Size boardSize(7, 3);

		found = findChessboardCorners(image, boardSize, corners);

		if (found)

		{
			//亚像素点检测
			cornerSubPix(imageGray, corners, Size(5, 5),

				Size(-1, -1), TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 30, 0.1));

			drawChessboardCorners(image, boardSize, Mat(corners), found);

			vector< Point3f > obj;

			float square_size = 30;

			std::vector<vector<Point2f>> image_points;
			std::vector<vector<Point3f>> object_points;


			for (int i = 0; i < boardSize.height; i++)

				for (int j = 0; j < boardSize.width; j++)

					obj.push_back(Point3f((float)j * square_size, (float)i * square_size, 0));

			if (found)

			{

				cout << i << ". Found corners!" << endl;

				image_points.push_back(corners);

				object_points.push_back(obj);

			}

		}


		cv::imshow("image", image);

		cv::waitKey(0);

	}

	return 0;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值