博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
libtiff库使用
阅读量:6814 次
发布时间:2019-06-26

本文共 3074 字,大约阅读时间需要 10 分钟。

转自文件

 

此文章为了记录我在使用libtiff库中的一些问题而写,将不断补充。

libtiff库是读取和写入tiff文件最主要的一个开源库,但文档写的实在不敢恭维。相对资料也是异常稀少。

libtiff库的安装

libtiff库的最新的最新版本可以从http://www.libtiff.org/下载,即可以编译源码也可以采用预先编译好的二进制文件。

本人推荐使用预编译版本,自己编译容易缺少依赖库,同时也可能出现一些莫名其妙的问题。

tiff文件的读写函数:

 

1 //获取strip大小2 tsize_t TIFFStripSize(TIFF *tif);3 //读取strip数据,buf缓冲区可由TIFFStripSize计算,size取-1代表读取整个strip7 tsize_t TIFFReadEncodedStrip(TIFF *tif, tstrip_t strip, tdata_t buf, tsize_t size);

将多色tiff文件分割

1     uint32 imageWidth, imageLength, TileWidth, TileLength, imageRowsPerStrip ; 2     uint16 imageCompression, imageSamplePerPixel ; 3     uint16 imagePlanarConfig, imagePhotoMetric, ResolutUnit, Orientation ; 4     uint16 bps ; 5     float X_Resolut, Y_Resolut ; 6  7     TIFF *tif_r, *tif_w ;   8     unsigned char *buf; 9     tstrip_t strip ;10 11     tif_r = TIFFOpen("image_4plane.tif", "r");12     if (!tif_r)13     {14         error_handler("Open Tiff File Error!");15         return -1;16     }17     /* 讀取 TIFF 標籤 */18     TIFFGetField(tif_r, TIFFTAG_IMAGEWIDTH, &imageWidth);19     TIFFGetField(tif_r, TIFFTAG_IMAGELENGTH, &imageLength);20 21     TIFFGetField(tif_r, TIFFTAG_BITSPERSAMPLE, &bps);22     TIFFGetField(tif_r, TIFFTAG_COMPRESSION, &imageCompression);23     TIFFGetField(tif_r, TIFFTAG_PHOTOMETRIC, &imagePhotoMetric);24 25     TIFFGetField(tif_r, TIFFTAG_SAMPLESPERPIXEL, &imageSamplePerPixel);26     TIFFGetField(tif_r, TIFFTAG_ROWSPERSTRIP, &imageRowsPerStrip);27     if (imageRowsPerStrip != 1)28     {29         error_handler("Rows Each Strip Is Not 1!");30         return -1;31     }32 33     TIFFGetField(tif_r, TIFFTAG_XRESOLUTION, &X_Resolut);34     TIFFGetField(tif_r, TIFFTAG_YRESOLUTION, &Y_Resolut);35     TIFFGetField(tif_r, TIFFTAG_RESOLUTIONUNIT, &ResolutUnit);36 37     TIFFGetField(tif_r, TIFFTAG_PLANARCONFIG, &imagePlanarConfig);38     TIFFGetField(tif_r, TIFFTAG_ORIENTATION, &Orientation);39 40     int stripsize = TIFFStripSize(tif_r);41     buf = (unsigned char *) malloc(stripsize) ;42     if (!buf)43     {44         error_handler("Allocate Buffer Failed!");45     }46     Mat ht_img(Size(imageWidth, imageLength),CV_8UC1,Scalar::all(0));47     const int color[7] = {0,1,2,3,4,5,6};48     unsigned char * pRow; 49             50             51     for (strip = 0; strip < TIFFNumberOfStrips(tif_r); strip++)52     {53         TIFFReadEncodedStrip(tif_r, strip, buf, (tsize_t) -1);54         pRow = ht_img.ptr(strip);55         for (int i_pixel = 0; i_pixel < imageWidth; i_pixel++)56         {57             pRow[i_pixel] = buf[i_pixel*imageSamplePerPixel + color[6]];58         }59     }60     imwrite("strip_out.tiff", ht_img);61     62     free(buf);63     TIFFClose(tif_r);64     printf("Done!\n");

 

 

参考文献:

1. libtiff库的使用

http://darkranger.no-ip.org/archives/v5/document/develop/libtiff_tutorial.htm

2. 关于如何判断一个tiff文件是tile或者是strip的说明

http://www.asmail.be/msg0054551721.html

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6743973.html
,如需转载请自行联系原作者
你可能感兴趣的文章
基于LoadRunner的web测试
查看>>
shell脚本控制流程
查看>>
bbs与BLOG与SNS在区别
查看>>
H3CNE 大综合实验 覆盖所有的NE课程
查看>>
统计文件行数
查看>>
ubutu使用apt-get 安装报:Err http://security.ubuntu.com precise-security InRelease 等
查看>>
Leetcode#19Remove Nth Node From End of List
查看>>
什么是软件测试
查看>>
数据库中nchar,nvarchar,char,varchar的区别
查看>>
利用php soap实现web service (二)
查看>>
浅谈PHP弱类型安全
查看>>
linux下tomcat开机自启动
查看>>
使用go语言的list实现一个简单的LRU缓存
查看>>
rdma centos 7.3安装
查看>>
CloudStack中注册vsphere模版提示Connection Refused的解决方法
查看>>
我的友情链接
查看>>
更改WIIN7下C盘根目录下的写入权限
查看>>
python符号打印,bpython ,脚本tab自动补全
查看>>
python生成随机验证码
查看>>
续上篇LVS脚本
查看>>