我尝试使用 openCv 功能在 c++ 中旋转后进行双线性插值,但不使用在 openCv 中实现的双线性插值。
在我的输出图像中,总是有一些伪影(完全不同的像素颜色)。
我使用这个公式:
双线性插值公式
我没有使用来自 math.h 的 ceil,而是来自 openCV 的 cvRound()。
所以我的输入是: 莉娜
我的工件输出是:
旋转和插值后的莉娜
我对所有 RGB 值使用该公式,因此对于 B 它看起来:
int l = cvRound(xn);
int k = cvRound(yn);
float a = xn-l;
float b = yn-k;
uchar B = (1-a)*(1-b)*src.at<cv::Vec3b>(l,k).val[0]+a*(1-b)*src.at<cv::Vec3b>(l+1,k).val[0]+b*(1-a)*src.at<cv::Vec3b>(l,k+1).val[0]+a*b*src.at<cv::Vec3b>(l+1,k+1).val[0];
xn 和 yn 是变换 MAT 中的坐标,它们是浮点数。
正如您所看到的,大部分输出图片都是按应有的方式计算出来的,但不知何故,它们是很少的伪影,这让我没有任何意义。我需要摆脱他们。
感谢您的任何建议。