OpenCV实现影像畸变矫正GPU

本文介绍如何使用OpenCV的GPU加速功能进行影像畸变矫正。通过initUndistortRectifyMap和remap函数,结合相机矩阵和畸变系数,实现对图像的高效畸变矫正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenCV实现影像畸变矫正GPU

OpenCV实现影像矫正使用的是
initUndistortRectifyMap()计算畸变的映射
remap()计算映射,其详解见:OpenCV函数remap详解

注:k1,k2,p1,p2,k3的顺序
在这里插入图片描述
只能纠正不考虑skew扭曲参数的情况。

	Mat src_cpu = imread(in_filename);
	cv::cuda::GpuMat src(src_cpu);
	cv::cuda::GpuMat distortion(src.size(),src.type());
	cv::Mat result;
	//Mat src = imread(in_filename);
	//Mat distortion = src.clone();
	Mat camera_matrix = Mat::zeros(3, 3, CV_64FC1);
	Mat distortion_coefficients = Mat::zeros(1,5,CV_64FC1);


	cv::Size imageSize = src.size();
	camera_matrix.at<double>(0, 0) = f;
	camera_matrix.at<double>(0, 2) = x0;
	camera_matrix.at<double>(1, 1) = f;
	camera_matrix.at<double>(1, 2) = y0;
	camera_matrix.at<double>(2, 2) = 1;
	//std::cout << camera_matrix << std::endl;

	distortion_coefficients.at<double>(0, 0) = K1;
	distortion_coefficients.at<double>(0, 1) = K2;
	distortion_coefficients.at<double>(0, 2) = P1;
	distortion_coefficients.at<double>(0, 3) = P2;
	distortion_coefficients.at<double>(0, 4) = K3;

	//矫正
	//undistort(src, distortion, camera_matrix, distortion_coefficients);

	cv::Mat map1, map2;
	initUndistortRectifyMap(
		camera_matrix, distortion_coefficients, Mat(),
		camera_matrix, imageSize,
		CV_32FC1, map1, map2);

	::cv::cuda::GpuMat m_mapx;
	::cv::cuda::GpuMat m_mapy;
	m_mapx = ::cv::cuda::GpuMat(map1);
	m_mapy = ::cv::cuda::GpuMat(map2);

	::cv::cuda::remap(src, distortion, m_mapx, m_mapy, INTER_LINEAR);
	distortion.download(result);


	//imshow("img", src);
	//imshow("undistort", distortion);
	//imwrite("undistort.jpg", distortion);

	//imshow("img", src_cpu);
	//
	//imshow("undistort", result);
	//waitKey(0);

	imwrite(out_filename, result);

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值