我尝试使用openCv功能在c ++中旋转后进行双线性插值,但不使用在openCv中实现的双线性插值。
在我的输出图像中,总会有一些瑕疵(完全不同的像素颜色)。
我正在使用这个公式:
双线性插值公式
我没有使用math.h中的ceil,而是使用openCV中的cvRound()。
所以我的意见是: 的海伦
我的工件输出是:
旋转和插值后Lena
我对所有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中的坐标,它们是浮点数。
正如你所看到的那样,大部分输出图像都应该按原样计算,但不知怎的,它们很少有工件,这让我毫无意义。我需要摆脱他们。
感谢您的任何建议。
答案 0 :(得分:4)
您看到的异常绿色像素必须由绿色通道中的下溢(-1变为+255)引起。
在分配给B之前,尝试将插值表达式钳制到[0,255]。