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);
	}
}

不產生插值的縮小深度圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM