opencv-warpAffine仿射变换
仿射变换对应着五种变换:平移,缩放,旋转,翻转,错切
#include<opencv2/opencv.hpp> #include<iostream> #include <vector> int main(int argc, char** argv) { cv::Mat I = cv::imread("D:/bb/tu/ma.png"); cv::Mat dst; //设置原图3个变换顶点 cv::Point2f AffinePoints0[3] = { cv::Point2f(10, 10), cv::Point2f(10, 300), cv::Point2f(300, 10) }; //仿射变换是根据三个点来变换的 //设置目标图像3个变换顶点 cv::Point2f AffinePoints1[3] = { cv::Point2f(50, 50), cv::Point2f(50, 350), cv::Point2f(250, 10) }; cv::Mat Trans = getAffineTransform(AffinePoints0, AffinePoints1);//计算变换矩阵 //参数1:原图像的3个点 //参数2:目标图像的3个点 warpAffine(I, dst, Trans, cv::Size(I.cols, I.rows));//矩阵仿射变换 //参数1:变换前图像 //参数2:变换后图像 //参数3:变换矩阵,用另一个函数getAffineTransform()计算 //参数4:输出图像大小 //参数5:参数int flags=INTER_LINEAR:设置插值方式,默认方式为线性插值,看下图 imshow("src", I); imshow("dst", dst); cv::waitKey(0); return 0; }
资料:https://blog.csdn.net/zhu_hongji/article/details/81660893
getRotationMatrix2D旋转
#include<opencv2/opencv.hpp> #include<iostream> int main(int argc, char** argv) { cv::Mat src = cv::imread("D:/bb/tu/1.jpg"); cv::imshow("src", src); int rows = src.rows; int cols = src.cols; cv::Point2f center = cv::Point2f(rows / 2, cols / 2); cv::Mat Trans,dst; double angle = 90.0; double scale = 0.8; Trans =getRotationMatrix2D(center, angle, scale);//计算变换矩阵--旋转 //参数1:旋转的中心点 //参数2:旋转角度,正号为逆时针,负号为顺时针 //参数3:旋转后图像相比原来的缩放比例,1为等比例缩放 warpAffine(src, dst, Trans, cv::Size(src.cols, src.rows));//矩阵仿射变换 cv::imshow("dst", dst); cv::waitKey(0); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2020-11-30 photoshop--图层
2020-11-30 Arduino--人体触摸模块