作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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 中的坐标,它们是 float 。
如您所见,大部分输出图片都是按应有的方式计算的,但不知何故它们很少是人工制品,这让我觉得毫无意义。我需要摆脱他们。
感谢您的任何建议。
最佳答案
你看到的异常绿色像素点一定是绿色 channel 下溢(-1变成+255)造成的。
在分配给 B 之前尝试将插值表达式限制在 [0,255]。
关于c++ - 双线性插值伪影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50086717/
我是一名优秀的程序员,十分优秀!