opencv - 如何使用 OpenCV 进行非线性透视拉伸?
解决方案
我找到了一种使用重映射函数并使用指数函数重新映射每个像素的方法:
cv::Mat mapX, mapY;
mapX.create(m_nRemapHeight, m_nRemapWidth, CV_32FC1);
mapY.create(m_nRemapHeight, m_nRemapWidth, CV_32FC1);
for (int j = 0; j < m_nRemapHeight; j++)
{
for (int i = 0; i < m_nRemapWidth; i++)
{
mapX.at<float>(j, i) = (float)i;
float t = (m_nRemapHeight * 0.5f);
float r = j + t;
float fVal = ((r*r) / (m_nRemapHeight + t * 2));
fVal -= ((t*t) / (m_nRemapHeight + t * 2));
mapY.at<float>(j, i) = fVal;
}
}
cv::remap(srcMat, dstMat, matX, matY, CV_INTER_LINEAR, 0);
推荐阅读
- splunk - Splunk:从搜索中返回 One 或 True,在另一个搜索中使用该结果
- java - 场景的类设计:继承与枚举
- simulink - Simulink:在停止时引用掩码块
- opengl - 大纲(OpenGL 2.0)
- javascript - 使用 react 根据后端响应更新复选框值
- c++ - 病态模板偏特化
- git - 错误:pathspec 'tut51.cpp' 与 git 已知的任何文件都不匹配
- c# - 加载卫星程序集时的并发问题?
- android - Flutter io listSync 无法在 Android 11 上运行
- microsoft-graph-api - 使用 Graph API 在 SharePoint 列表中创建新的团队列