opencv技巧:投影变换代替旋转

普通旋转

cv::warpAffine 函数用来旋转图片

c 复制代码
static cv::Mat RotateMatWithTransparency(const cv::Mat& src, double angle) {
	//double angle = 45.0; // 旋转角度
	cv::Point2f center(src.cols / 2.0f, src.rows / 2.0f);
	cv::Mat rotMat = cv::getRotationMatrix2D(center, angle, 1.0);
	cv::Mat dst;
	cv::warpAffine(src, dst, rotMat, src.size(), cv::INTER_LINEAR, cv::BORDER_TRANSPARENT);
	return dst;
}

投影变换来做旋转

使用投影变换来代替旋转函数,使用warpPerspective 函数

c 复制代码
static cv::Mat rotateImageWithProjection(const cv::Mat& image, double angle, cv::Point2f center = cv::Point2f()) {
	if (center.x == 0 && center.y == 0) {
		center = cv::Point2f(image.cols / 2.0, image.rows / 2.0);
	}

	// 计算旋转矩阵(投影变换形式)
	double rad = angle * CV_PI / 180.0;
	double sinVal = sin(rad);
	double cosVal = cos(rad);

	// 构建3x3投影矩阵
	cv::Mat M = (cv::Mat_<double>(3, 3) <<
		cosVal, -sinVal, center.x * (1 - cosVal) + center.y * sinVal,
		sinVal, cosVal, center.y * (1 - cosVal) - center.x * sinVal,
		0, 0, 1
		);

	// 计算旋转后的图像尺寸,避免裁剪
	int newWidth = static_cast<int>(image.cols * fabs(cosVal) + image.rows * fabs(sinVal));
	int newHeight = static_cast<int>(image.cols * fabs(sinVal) + image.rows * fabs(cosVal));

	// 调整平移量,使图像居中
	M.at<double>(0, 2) += (newWidth / 2.0) - center.x;
	M.at<double>(1, 2) += (newHeight / 2.0) - center.y;

	// 应用投影变换
	cv::Mat rotated;
	warpPerspective(image, rotated, M, cv::Size(newWidth, newHeight),
		cv::INTER_LINEAR, cv::BORDER_CONSTANT, cv::Scalar(0, 0, 0));
	return rotated;
}
相关推荐
Zentceh31 分钟前
AI-ISP vs 传统ISP全面对比
人工智能·深度学习·计算机视觉·车载系统·transformer·无人机·智能硬件
棣廷2 小时前
初识OpenCV——Dlib人脸检测、关键点定位与表情识别
opencv·目标检测·机器学习
Keep_Trying_Go2 小时前
Kaggle CLI Datasets上传文件教程(保姆级)
人工智能·计算机视觉·kaggle
这张生成的图像能检测吗2 小时前
(论文速读)FiDeSR:高保真保细节一步扩散超分辨率
图像处理·人工智能·深度学习·计算机视觉·扩散模型·图像超分
hhzz3 小时前
【OpenCV 入门到精通 07】滤波、阈值与形态学:图像去噪与形状处理
人工智能·python·opencv·计算机视觉
华清远见成都中心4 小时前
OpenCV中颜色空间有哪些区别
人工智能·opencv
陈嘿萌4 小时前
ECCV 2026|MAVFusion:运动感知稀疏交互驱动的高效红外-可见光视频融合
人工智能·计算机视觉·图像融合·佛山大学·学术研究与理论基础·eccv2026
陈嘿萌5 小时前
ACM MM 2026 华北电力|连续融合空间实现实例级细粒度的可控红外与可见光图像融合
人工智能·计算机视觉·图像融合·学术研究与理论基础
陈嘿萌5 小时前
ECCV 2026|AerialMetric:一个全新的无人机单目深度估计数据集,面向真实世界航拍场景
人工智能·计算机视觉·学术研究与理论基础
潜心一志14 小时前
HALCON软件——基本架构,算子参数
学习·计算机视觉