OpenCV中的resize缩放使用最邻近插值INTER_NEAREST仍会产生新值

Posted li-minghao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV中的resize缩放使用最邻近插值INTER_NEAREST仍会产生新值相关的知识,希望对你有一定的参考价值。

resize缩放使用最邻近插值INTER_NEAREST产生新值的问题

假如一张图片中,一部分区域值直接是0,也就是空的。
在缩放的时候,我们自然不希望在0值与有效值之间产生插值。
为了使用方便,我刚开始想当然用了OpenCV的库函数:

cv::resize(src_mat,dst_mat,cv::Size(out_width,out_height),cv::INTER_NEAREST);

但是不幸的事情发生了,总会在边缘产生插值。我的例子是深度图:

原始的
技术图片

缩小的:(边缘产生插值点,因为我的浮点数彩色可视化是相对值的,所以颜色也发生了变化)
技术图片

不得已,自己手工写了个最邻近插值代码:

int src_h = src_mat.rows; //height
int src_w = src_mat.cols;//width
int out_h=720, out_w=960;
cv::Mat dst_mat=cv::Mat::zeros(out_h, out_w, CV_32F); 我的矩阵是浮点数,缩放后的宽为out_w,高为out_h

for (int j = 0; j < out_h; j++) {
	float* data = dst_mat.ptr<float>(j);
	for (int i = 0; i < out_w; i++) {
	    int raw_w=int(i* (double(src_w)/out_w)) , raw_h = j * (double(src_h)/out_h);
		data[i]=src_mat.at<float>(raw_h,raw_w);
	}
}

不产生插值的缩小深度图:
技术图片

以上是关于OpenCV中的resize缩放使用最邻近插值INTER_NEAREST仍会产生新值的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV探索之路:图片缩放和图像金字塔

OpenCV 图片尺寸缩放——resize函数

OpenCV 图片尺寸缩放——resize函数

极智AI | OpenCV and torchvision.transforms 实现图像等比例缩放方法

OpenCV中resize函数插值算法的实现过程(五种)

OpenCV的resize方法与双线性插值