让opencv读取tif图象
来源:互联网 发布:章燎原的学历知乎 编辑:程序博客网 时间:2024/04/30 08:57
(如转载请注明出处)
花了imagesoft一个上午时间,终于改好了,问题不在libtiff,而是opencv的问题,发现问题后在网上搜了一下,找不到原因,而同样的图象在freeimage和cximage都是能打开的。都是使用libtiff,没道理呀,下载最新的libtiff,覆盖进去重新生成dll,还是不行;这也难不倒我,从freeimage提取libtiff,覆盖,编译,运行,仍然不行。我晕。没办法,上法宝,跟踪调试,如此这般,终于找到原因了,个中苦乐就不说了,直接说怎么修改好了。
修改grfmt_tiff.cpp
1) bool TiffDecoder::readHeader()
没具体分析,反正是compression不对,直接注释掉了,有时间再来慢慢想
if( TIFFRGBAImageOK( tif, errmsg ) &&
TIFFGetField( tif, TIFFTAG_IMAGEWIDTH, &width ) &&
TIFFGetField( tif, TIFFTAG_IMAGELENGTH, &height ) &&
TIFFGetField( tif, TIFFTAG_PHOTOMETRIC, &photometric )/* &&
(!TIFFGetField( tif, TIFFTAG_COMPRESSION, &compression ) ||
(compression != COMPRESSION_LZW &&
compression != COMPRESSION_OJPEG))*/)
2) bool TiffDecoder::readData( Mat& img )
我手头有些图读TIFFTAG_ROWSPERSTRIP属性返回0,到freeimage跟踪去看,一回事,既然不行,改!
/*
if( (!is_tiled &&
TIFFGetField( tif, TIFFTAG_ROWSPERSTRIP, &tile_height0 )) ||
(is_tiled &&
TIFFGetField( tif, TIFFTAG_TILEWIDTH, &tile_width0 ) &&
TIFFGetField( tif, TIFFTAG_TILELENGTH, &tile_height0 )))
*/
if(!is_tiled)
{
TIFFGetField( tif, TIFFTAG_ROWSPERSTRIP, &tile_height0 );
}
if(is_tiled)
{
TIFFGetField( tif, TIFFTAG_TILEWIDTH, &tile_width0 );
TIFFGetField( tif, TIFFTAG_TILELENGTH, &tile_height0 );
}
改了以上两步,已经能读一部分tif了,但还有一些tif仍然读不出来,继续跟踪
修改image.cpp
3) bool CvvImage::Create( int w, int h, int bpp, int origin )
这里限制了图象大小为10000,改掉
//const unsigned max_img_size = 10000;
if( (bpp != 8 && bpp != 24 && bpp != 32) ||
/*(unsigned)w >= max_img_size || (unsigned)h >= max_img_size ||*/
(origin != IPL_ORIGIN_TL && origin != IPL_ORIGIN_BL))
{
assert(0); // most probably, it is a programming error
return false;
}
如此,大功告成。
- 让opencv读取tif图象
- Java实现GDAL读取TIF并转换为OpenCV(Mat格式)
- Java jai 读取tif页数
- opencv保存图象
- opencv保存图象
- 论vs2008与opencv和tif图片
- OpenCV中的图象通道问题
- opencv 图象角点检测
- TIF图像文件的读取(c++代码)
- 读取和创建光栅图(TIF)
- TIF图像文件的读取(c++代码)
- MATLAB读取tif格式图片的错误
- 使用libtiff读取tif/tiff图像
- Python模块_PyLibTiff读取tif文件
- Picture控件图象保存为bmp,jpg,emf,tif,gif(方法二)
- Picture控件图象保存为bmp,jpg,emf,tif,gif(方法一)
- matlab读取图象,并对图象进行加处理
- 利用opencv对图象区域扣取
- 聊天不用找人 把QQ好友安置到桌面
- 事件和委托的小案例
- Cakephp containable behavior
- 一个人的生活
- 谁愚弄了中国人
- 让opencv读取tif图象
- DFB发射器件功率要求理论计算
- 10 使用性能视图调优
- test write by wlw
- 类
- 第五章 注释方法注入
- 多种思路给js文件传递参数,参数,js参数,js文件参数,js文件传参数
- 选择浏览器
- 每天1点执行的oracle JOB样例