OpenCV之薄板样条插值(ThinPlateSpline)

官方文档:OpenCV: cv::ThinPlateSplineShapeTransformer Class Reference

使用方法:

头文件:#include <opencv2/shape/shape_transformer.hpp>

复制代码
(1)点匹配
一般根据有多少个样本(或者点)来设置,如有M个点,并且下标相同的点是对应点,那么其匹配设置:
复制代码
std::vector<cv::DMatch> matches;
for(int i=0;i < M; ++i)
    matches.append(cv::DMatch(i, i, 0))

(2)计算转换矩阵

复制代码
//源点及目标点(请自行填充)
vector<Point2f> _dstPts,_srcPts;

//获取转换矩阵
cv::Ptr<cv::ThinPlateSplineShapeTransformer> tps
tps = cv::createThinPlateSplineShapeTransformer(0);
tps->estimateTransformation(_dstPts, _srcPts,matches);

(3)获取任意点的转换值

复制代码
//_in_pts--输入值,_out_pts--输出值
vector<Point2f> _in_pts,_out_pts;
_in_pts.push_back(Point2f(0,0));//只举了两个值
_in_pts.push_back(Point2f(1,1));
tps->applyTransformation(_in_pts,_out_pts);

(4)图像变换

图像变换与多点变换相同,注意estimateTransformation只接受输入为(1,m,2)的tuple,不然就会报错,因此如果是图像需要做以下变换:

img = img.reshape(1, -1, 2)

estimatetransformation的说明文档的输入顺序如下:source_points,target_points,matches. 但开发者搞反了输入顺序,如果对图像变换,source 和 target 点应该互换,但对浮动图像选的点做变换又是正确的(崩溃)参考这个opencv的issue:

https://github.com/opencv/opencv/issues/7084

相关推荐
雾屿_Mistisle15 分钟前
工作台完善日志(一)
人工智能
MgArcher16 分钟前
本地部署一个 7B 大模型,到底需要多大显存?
人工智能
学IT的周星星16 分钟前
给 Agent 装上“手“:Function Calling / Tool Use 从零讲透
人工智能·大模型·agent
姜楠聊AI转型17 分钟前
团队AI编程落地第 8 篇:AI 编程 Rules 规则模板(可直接复制):分层写法 + 5 个原则 + 维护机制
人工智能·ai编程·研发管理·vibe coding·ai coding·coding agent
AliCloudROS17 分钟前
从 TPOT 188ms 到 22ms:大模型多机分布式部署的并行策略实测
人工智能
桃西西呀18 分钟前
LangGraph4j之七:子图与组合
人工智能·llm·ai编程
待遇安然风18 分钟前
DeepSeek 架构研读 (二):DeepSeek-V2 MoE 架构与 MLA 机制详解
人工智能
kyle~19 分钟前
多模态传感器软件同步后的数据关联时序误差测算
计算机视觉·机器人·相机·传感器
预知同行19 分钟前
为什么大家都在劝退 Agent 开发?因为多数场景根本轮不到它出场
人工智能
星云低代码开发平台19 分钟前
AI 销售周报的数据契约:CRM 商机、ERP 订单与异常核对
大数据·人工智能·企业ai