你这里有两个问题。据我了解,出现更大的问题是因为您将离散积分坐标转换为浮点坐标。另一个问题是生成的图像的大小大于或小于原始图像的大小。此外,生成的图像不必是矩形的,因此必须将其裁剪或沿角落填充黑色像素。
根据http://opencv.willowgarage.com/documentation/geometric_image_transformations.html没有径向变换例程。
I'd suggest you do the following:
- 将原始图像放大为宽*2,高*2。将新图像设置为黑色。(cvResize, cvZero)
- 遍历原始图像中的每个像素。找到像素的新坐标。将其值的 1/9 添加到新坐标的所有 8 个邻居以及新坐标本身。(CV_IMAGE_ELEM(...) += 1.0/9 * ....)
- 将新图像缩小到原始宽度、高度。
- 根据结果,您可能需要使用锐化程序。
如果你想保留一些超出范围的像素,那是一个不同的问题。基本上你想找到你收到的坐标的最小值和最大值,例如你的原始图像有 Min,Max = [0,1024] 和你的新 MinNew,MaxNew = [-200,1200] 你做一个函数
normalize(int &convertedx,int &convertedy)
{
convertedx = MinNewX + (MaxNewX-MinNewX)/(MaxX-MinX) * convertedx;
convertedy = ...;
}