原理如图:
float subPixelValue(cv::Mat &img, float x, float y)
{
// boundary check
if (x < 0)
x = 0;
if (y < 0)
y = 0;
if (x >= img.cols - 1)
x = img.cols - 1 - 0.001;
if (y > img.rows - 1)
y = img.rows - 1 - 0.001;
uchar *data = &img.data[int(y) * img.step + int(x)]; //行*每行步长+列; 亚像素点最近的左上角
float xx = x - floor(x); //亚像素点到左边整数的距离
float yy = y - floor(y); //亚像素点到上边整数的距离
return float(
(1 - xx) * (1 - yy) * data[0] +
xx * (1 - yy) * data[1] +
(1 - xx) * yy * data[img.step] +
xx * yy * data[img.step + 1]);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)