全黑图像去除
来源:互联网 发布:淘宝客服电话号码多少 编辑:程序博客网 时间:2024/05/01 19:14
本系列文章由 @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中,调整灰度曲线,显示图片内容(将曲线调成近似直角折线):
那些黑色图像(真的是全黑,像素值为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); }}
即,使用简单的线性拉伸方法:
另外,为了操作简单,将代码写成批处理的形式:
std::vector<std::string> file_list = getFileList(input_folder);
指定图片所在文件夹后,自动加载当前文件夹子目录下的所有tif
图片,以vector
的形式返回文件名。
由于每张图片的操作是独立的,所以还可以把OpenMP开启:
#pragma omp parallel for
工程编译环境,如下:
CMake ( version >= 2.8.3)
Visual Studio 2010
OpenCV
测试程序:
BlackImageFilterTest
:滤除全黑图像,其余文件自动另存至当前图像文件下的空子目录下ImageConversionTest
:将原16-bit图像转为8-bit,可选择地保留或去除全黑图像
编译结果如图:
测试结果:
转为8-bit图像,保留全黑图
转为8-bit图像,删除全黑图
1 0
- 全黑图像去除
- 去除图像旋转黑边现象
- cmd去除黑窗口
- 去除dialog的黑边
- 去除自定义AlertDialog黑边
- 图像处理---黑白化
- 图像去除彩色源代码
- 图像去除彩色源代码
- ps 去除图像背景
- c#去除图像噪音
- fedora 任务栏全黑解决方案
- Pycharm设置界面全黑
- vc自画窗体 黑边去除
- AlertDialog去除黑边自定义布局
- android 自定义Dialog去除黑边
- 去除自定义alertdialog(dialog)黑边
- 笔记107--去除自定义AlertDialog黑边
- 去除webView底部黑条(黑线)
- 登陆时常用的判断
- java线程虚假唤醒
- Struts2优缺点概述
- 设计模式总叙
- Apache和Nginx防盗链
- 全黑图像去除
- centos 7安装mysql5.5和安装 mariadb 的正确命令
- 225. Implement Stack using Queues
- strtotime()函数应用
- 从Eclipse转移到IntelliJ IDEA一点心得
- Service+Notification
- ARM__UART详解
- 分享一个链接
- JAVA笔记之多态