全黑图像去除

本文介绍了如何使用OpenCV处理16-bit遥感图像,去除全黑图像。通过检查图像的灰度最大最小值来识别全黑图像,并提供了将16-bit图像转换为8-bit图像的线性拉伸方法。代码已实现批处理功能,支持开启OpenMP加速。测试结果显示,程序能有效处理图像,用户可以选择保留或删除全黑图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本系列文章由 @yhl_leo 出品,转载请注明出处。
文章链接: http://blog.csdn.net/yhl_leo/article/details/50904358


昨天一个朋友,向我求助,帮忙去除掉一组遥感影像数据中,因为裁剪时产生的全黑图像,实现起来也很简单,就将工程代码提供给大家:

GitHub链接:yhlleo/ImageFormatConversion

图像格式为单通道16-bit的tif,可以使用OpenCV库读取:

cv::Mat curImage = cv::imread(fileName, IMREAD_UNCHANGED);

因为图像是16-bit的,所指使用图片查看器,浏览的话,肯定是全黑的。但是可以在Photoshop中,调整灰度曲线,显示图片内容(将曲线调成近似直角折线):

image_ps

那些黑色图像(真的是全黑,像素值为0),判断方法比较简单,获取图像灰度最大最小值,区间范围是0,必然是全黑图像:

double pMax = 0, pMin = 0;
cv::minMaxIdx(curImage, &pMin, &pMax);
int pRange = pMax - pMin;

if ( pRange > 0 )
{
    // ...
}
else
{
    // Black image 
    // ...
}

如果想把16-bit图像转为常见的8-bit图像,我使用的方法是这样的:

if( pRange > 0 )
{
    for ( int i=0; i<rows*cols; ++i )
    {
        int pValue = ( static_cast<int>(*++data_cur & 0xffff) - ipMin ) * 255 / pRange;
        data_trans[i] = static_cast<uchar>(pValue);
    }
}

即,使用简单的线性拉伸方法:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值