主函数

#include "image.h"
#include <string>
#include<cmath>
#include<math.h>int main(int argc, char *argv[])
{Image *Im = new Image();//定义的一个读写图片的类,用的tif库std::string outputpath;std::string inputpath;std::cout << "input image data input path:";std::cin >> inputpath;std::cout << "input image data outnput path:";std::cin >> outputpath;QString name_a = ".tif";QDir dir(QString::fromStdString(inputpath));if (!dir.exists()){qWarning("cannot open dir");}QStringList filter;QString fit("*");fit.append(name_a);filter << fit;dir.setNameFilters(filter);QStringList abclist = dir.entryList();QString str_temp;QString str_temp1;QStringList file_input_list;QStringList file_output_list;// std::cout << abclist.size();int thenumber = abclist.size();for (int kk = 0; kk < abclist.size(); kk++){str_temp = QString::fromStdString(inputpath);str_temp.append("/");str_temp.append(abclist.at(kk));file_input_list.append(str_temp);str_temp.clear();str_temp1 = QString::fromStdString(outputpath);str_temp1.append("/");str_temp1.append(abclist.at(kk));file_output_list.append(str_temp1);str_temp1.clear();}int numProcs = omp_get_num_procs();int size = file_input_list.length();int width = Im->get_Image_width(file_input_list[0].toStdString().c_str());//获取图片的宽int height = Im->get_Image_height(file_input_list[0].toStdString().c_str());//获取图片的高
#pragma omp parallel for num_threads(numProcs)for (int num = 0; num < size; num++){uint16 *nImage = new uint16[width*height];memset(nImage, 0, sizeof(uint16)*width*height);Im->Read16BitImage(file_input_list[num].toStdString().c_str(), nImage, width, height);unsigned char * nImage8 = new unsigned char[width*height];memset(nImage8, 0, sizeof(unsigned char)*width*height);Im->transform16_8bit(nImage, nImage8,width, height);/*Im->connect_filter(nImage, width, height, depth);*//*Im->Median_filter(nImage, width, height, depth);*/std::cout << num << std::endl;Im->Write8BitImage(file_output_list[num].toStdString().c_str(), nImage8, width, height);delete[]nImage;nImage = NULL;delete[]nImage8;nImage8 = NULL;}return 1;

主函数用到的函数

int  Image::get_Image_width(const char path[])
{TIFFSetWarningHandler(0);TIFF *tif = TIFFOpen(path, "r");if (tif == 0) {printf(" open TIFF file %s failed\n", path);return false;}int width = 0;uint16 comperID;uint32 perrow;TIFFGetField(tif, TIFFTAG_COMPRESSION, &comperID);TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &perrow);TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width);TIFFClose(tif);std::cout << "TIFFTAG_COMPRESSION is   " << comperID << std::endl;std::cout << "TIFFTAG_ROWSPERSTRIP is   " << perrow << std::endl;return width;
}int Image::get_Image_height(const char path[])
{TIFFSetWarningHandler(0);TIFF *tif = TIFFOpen(path, "r");if (tif == 0) {printf(" open TIFF file %s failed\n", path);return false;}int height = 0;TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height);TIFFClose(tif);return height;}bool Image::Read16BitImage(const char path[], uint16* &Image, int &width, int &height)
{TIFFSetWarningHandler(0);TIFF *tif = TIFFOpen(path, "r");if (tif == 0) {printf(" open TIFF file %s failed\n", path);return false;}TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width);TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height);//Image = new uint16[width*height];TIFFSetWarningHandler(0);/*TIFF *tif = TIFFOpen(path, "r");*/if (tif == 0) {printf(" open TIFF file %s failed\n", path);}else{uint32 row;for (row = 0; row <(uint32)height; row++){//需要注意,这里内存偏移必须写为(row-ys)*widthTIFFReadScanline(tif, (Image + row*width), row);}TIFFClose(tif);}return true;
}void Image::transform16_8bit(uint16 *image, unsigned char* data, int width, int height)
{int maxdata = 0;int mindata = 65535;for (int i = 0; i < height; i++)for (int j = 0; j < width; j++){if (image[j + i*width]>maxdata)maxdata = image[j + i*width];if (image[j + i*width] < mindata&&image[j + i*width] != 0)mindata = image[j + i*width];}//unsigned char* data = new unsigned char[width*height];//memset(data, 0, sizeof(unsigned char)*width*height);for (int i = 0; i < height; i++)for (int j = 0; j < width; j++){if (image[j + i*width] != 0){data[j + i*width] = 254.0 / (double)(maxdata - mindata)*(image[j + i*width] - mindata) + 1;}}
}bool Image::Write8BitImage(const char path[], uint8* Image, int width, int height)
{TIFF *tif = TIFFOpen(path, "w");TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); //每个像素点应有几个通道TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); //每个通道的位宽,这里为8位图片TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_LEFTTOP);TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); //设定图片显示时,灰度值越小的像素越接近黑色//  TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tif, width));TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);uint8 * curRow = new uint8[width];for (uint32 row = 0; row < height; row++){//memcpy(curRow, (buffer+row*width), width);    // check the index here, and figure out why not using h*linebytesif (TIFFWriteScanline(tif, Image + row*width, row, 0) < 0)break;}delete[]curRow;TIFFClose(tif);return true;
}

获取文件夹下所有tif图片,并将16位图转为8位图相关推荐

  1. 获取文件夹下的文件名并存入txt中

    import os path_imgs='C:/Users/13451/Desktop/pic' #图片存放的地址 for files in os.listdir(path_imgs): #listd ...

  2. Windows批处理命令快速获取文件夹下特定类型的文件名(2022.5.15)

    Windows批处理命令快速获取文件夹下特定类型的文件名 (2022.5.15) 1.需求分析 2.batch简介 3.代码实现 3.1 八种编程语言分别实现 3.1.1 C# 实现 3.1.2 C+ ...

  3. Qt 获取文件夹下所有文件

    Qt 获取文件夹下所有文件代码如下: QStringList getFileNames(const QString &path) {QDir dir(path);QStringList nam ...

  4. C#获取文件夹下指定格式的所有文件

    C#获取文件夹下指定格式的所有文件的方法,虽然很简单,但还是分享一下吧,用到时可以稍加修改和优化就可以使用. 获取指定目录下所有文件 //最要使用 System.IO.Directory.GetFil ...

  5. android 获取文件夹下的所有文件

    昨天,在做工作时,需要遍历所有一个文件夹下的所有文件夹,当时自己也不知道怎么做,后来在网上搜索了一些资料,发现其实也很简单. 1.获取SD是否可以读写,如果可以,则传入文件的路径 /*读取输入的某个文 ...

  6. Python获取文件夹下的所有文件名

    需求:主要是因为手动获取太麻烦了: 代码: import osdef get_file_name_list(file_dir):''':brief:获取文件夹下内,所有文件:param file_di ...

  7. python 获取文件夹所有文件列表_python获取文件夹下所有文件及os模块方法

    python获取文件夹下所有文件 方法一:使用os.listdir import os for filename in os.listdir(r'c:\windows'): print filenam ...

  8. php获取文件夹下所有文件名(php遍历目录)

    当我对接小发猫API的时候,需要php获取文件夹下所有文件名,我们有时候需要读取目录里面的内容,在 PHP 有多个函数可以获取文件系统目录信息,今天就给大家分享 PHP 遍历目录的三种方法. php获 ...

  9. Windows 下 C++ 利用 OpenCV glob 函数获取文件夹下所有文件绝对路径

    绪论 本文记录 Windows 下 C++ 利用 OpenCv glob 函数得到 文件夹下所有文件的绝对路径(含文件名).本文还含有 std::string::find()等函数的记录.如果是 Py ...

  10. 【Windows】Windows10系统获取文件夹下的文件名方法

    在工作过程中经常会碰到需要获得文件夹下文件名的情况,而如果手动获取的话,不仅太慢还很容易出错,这该怎么办呢?下面教大家在win10系统中快速获取文件夹下文件名的方法. 工具/原料 Windows10 ...

最新文章

  1. 检查值是否是JavaScript中的对象
  2. OpenCV-Python 雪花飘落特效
  3. 由单例模式造成的内存泄漏
  4. caffemodel的大小计算
  5. Pytorch 1.1.0驾到!小升级大变动,易用性更强,支持自定义RNN
  6. java random 种子数_JAVA:Random的种子含义
  7. Android测试方法总结汇总
  8. python不用模块随机列表_python不用库实现随机 如何用python实现随机抽取
  9. 什么是软件需求,软件需求的分类
  10. php简易微博系统,基于html、css、PHP开发一个简单的微型博客系统(微博)
  11. 在线考试系统html源码,jQuery在线答题考试系统代码
  12. 解决QQ 群共享无法打开,页面无法显示
  13. 可充电电池安规认证标准、GB 9706.1-2020对医用电气设备中电池的要求
  14. Debezium系列之:sqlserver数据库开启CDC
  15. 2021-3-2打砖块游戏,轮播图,swiper,自执行函数
  16. 肌营养不良2020-2021最新治疗突破 肌营养不良2021最新进展
  17. Docker简介与安装
  18. java-net-php-python-ssm二手手机交易平台查重PPT计算机毕业设计程序
  19. 大学生计算机学科竞赛a类,专业学科竞赛(A类)
  20. win10 死机 无响应

热门文章

  1. c语言判断闰年并输出该月天数,C语言宏定义实现闰年判断并输出指定月的天数...
  2. 用好这 43 款 Chrome 插件,让你开发学习一下子好轻松!
  3. xlsx表格怎么筛选重复数据_excel表格中如何筛选重复数据
  4. 国内/国外常见搜索引擎
  5. Maven子父工程依赖配置,小白也能看得懂
  6. Re10:读论文 Are we really making much progress? Revisiting, benchmarking, and refining heterogeneous gr
  7. win11怎么关闭触控板?win11关闭触控板的三种解决方法
  8. Vue + Echarts 正态分布图,在线计算标准差,生成正态分布曲线
  9. 信息系统与信息化、信息系统开发方法、常规信息系统集成技术
  10. java运行html代码,java代码运行html