如何使用OpenCV进行非线性透视拉伸?
我需要执行一种图像拉伸,这种拉伸在顶部的比例更小,在底部的比例更大。我不知道怎样才能丢失像透视图这样的部分图像。OpenCV是否提供这种功能 我找到了一种使用函数并使用指数函数重新映射每个像素的方法:如何使用OpenCV进行非线性透视拉伸?,opencv,perspective,stretch,Opencv,Perspective,Stretch,我需要执行一种图像拉伸,这种拉伸在顶部的比例更小,在底部的比例更大。我不知道怎样才能丢失像透视图这样的部分图像。OpenCV是否提供这种功能 我找到了一种使用函数并使用指数函数重新映射每个像素的方法: cv::Mat mapX, mapY; mapX.create(m_nRemapHeight, m_nRemapWidth, CV_32FC1); mapY.create(m_nRemapHeight, m_nRemapWidth, CV_32FC1); for (int
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);