c++&python实现遥感影像1、2、5...%线性拉伸

原来的版本(不够简洁优化):(1条消息) c++实现ENVI1%Liner、2%Liner等拉伸_踌躇向前的博客-CSDN博客icon-default.png?t=M5H6https://blog.csdn.net/qq_41824159/article/details/105469986?spm=1001.2014.3001.5501

 c++版本:

cv::Mat LinerStrech(cv::Mat img, float ratio)
{
	cv::Mat mimg = img.clone();
    mimg.convertTo(mimg, CV_32FC1);
	int rows = img.rows;
	int cols = img.cols;
	int counts = rows * cols;
	mimg = mimg.reshape(1, counts);
	cv::sort(mimg, mimg, cv::SORT_EVERY_COLUMN + cv::SORT_ASCENDING);
	float cutmin = mimg.at<float>(int(counts*ratio));
	float cutmax = mimg.at<float>(int(counts*(1-ratio)));
	cv::Mat nimg = 255.0 * (img - cutmin) / (cutmax - cutmin);
	nimg.convertTo(nimg, CV_8UC1);
	return nimg;
}

python版本:

def Liner2persent(data, ratio):
    mdata = data.copy()
    rows, cols = data.shape[0:2]
    counts = rows*cols
    mdata = mdata.reshape(counts, 1)
    tdata = np.sort(mdata, axis=0)
    cutmin = tdata[int(counts*ratio), 0]
    cutmax = tdata[int(counts*(1-ratio)), 0]
    cutmax = tdata[int(counts*(1-ratio)), 0]
    ndata = 255.0*(data.astype(np.float32) - cutmin)/float(cutmax-cutmin)
    ndata[data < cutmin] = 0
    ndata[data > cutmax] = 255
    return ndata.astype(np.uint8)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值