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

相关推荐
RockChinQ1 小时前
群机器人别再只会回消息:给入群、好友申请各配一个处理器
人工智能
m0_547486661 小时前
《人工智能安全》全套PPT课件2026(复旦大学)
人工智能·安全·人工智能安全
是翎1 小时前
Vicquant的RAG评测盲区:20道文档问题漏掉18道,先查路由再看回答质量
大数据·人工智能
枯木◊靠推文躺平版1 小时前
2026 企业 AI 办公工具选型指南:理清需求再做采购决策
大数据·人工智能
szxinmai主板定制专家1 小时前
告别 ARM 实时性短板:基于 ZYNQ 的电力故障录波 + 工业振动数据采集系统设计
arm开发·人工智能·fpga开发·zynq·数据采集卡·arm+fpga·rk3588+fpga
互联网资讯1 小时前
AI短剧制作系统哪家好?2026热门短剧工具天空ai测评
大数据·人工智能·ai短剧系统
晨间晓2 小时前
图片里的角点在哪里?用华为云码道开发 OpenCV Harris 角点检测工具
人工智能·opencv·华为云
leizhen198408092 小时前
Vibe Coding:门槛降了,但判断力成了新的门槛(漫画)
人工智能·安全
for_ever_love__2 小时前
Agentic RAG 实战:让 Agent 自己决定怎么检索、检索几次
人工智能·后端·agent·控制·自适应·rag·检索策略
微三云 - 廖会灵 (私域系统开发)2 小时前
从 0 到 1 跑通一个社区平台:消费返物业费模型的产品设计与落地复盘
大数据·人工智能