Java实现GDAL读取TIF并转换为OpenCV(Mat格式)
2017-07-18 14:13
911 查看
Java实现GDAL读取本地图像
Java实现GDAL读取内存中图像
Java实现GDAL读取图像转OpenCV支持格式Mat
Java实现GDAL读取内存中图像
Java实现GDAL读取图像转OpenCV支持格式Mat
前言
GDAL可以支持多种影像格式,而OpenCV则可以对影像进行多种操作处理,所以将GDAL与OpenCV结合可以增强影像处理。虽然OpenCV可以读取tif等多种格式,但是在Java中涉及到读取hadoop的value值,读取内存中的影像数据GDAL仍然具有优势。所以本文给出Java操作GDAL读取本地图像、内存中图像的代码。作者本身利用以下代码在hadoop的map中读取value(存储的三波段遥感影像),转换成Mat格式,并使用OpenCV-2.4.9进行meanshift分割。1.读取内存中影像
//使用OpenCV for Java System.loadLibrary(Core.NATIVE_LIBRARY_NAME); //使用GDAL读取value中的遥感影像 byte[] bytes=value.getBytes(); gdal.AllRegister(); String memFileName="/vsimem/inmenfile"; gdal.FileFromMemBuffer(memFileName, bytes); Dataset ds=gdal.Open(memFileName, gdalconstConstants.GA_ReadOnly); //判断是否非空 if(ds==null||ds.GetRasterCount()==0){ return; } int xSize=ds.getRasterXSize(); int ySize=ds.getRasterYSize(); byte[] dataArrayR = new byte[xSize*ySize]; byte[] dataArrayG = new byte[xSize*ySize]; byte[] dataArrayB = new byte[xSize*ySize]; int[] bandR=new int[]{1}; int[] bandG=new int[]{2}; int[] bandB=new int[]{3}; int dataType = ds.GetRasterBand(1).GetRasterDataType(); ds.ReadRaster(0, 0, xSize, ySize, xSize, ySize, dataType, dataArrayR, bandR, 0); ds.ReadRaster(0, 0, xSize, ySize, xSize, ySize, dataType, dataArrayG, bandG, 0); ds.ReadRaster(0, 0, xSize, ySize, xSize, ySize, dataType, dataArrayB, bandB, 0); //GDAL to Mat Mat originalImage=new Mat(ySize, xSize, CvType.CV_8UC3); for(int j=0;j<ySize;j++){ for(int k=0;k<xSize;k++){ originalImage.put(j, k, new byte[]{dataArrayB[j*xSize+k],dataArrayG[j*xSize+k],dataArrayR[j*xSize+k]}); } }
读取本地影像
如果要读取本地文件则更为简单,读取使用以下代码:String INPUT_PATH="/home/hadoop/Desktop/testTIF"; //使用OpenCV for Java System.loadLibrary(Core.NATIVE_LIBRARY_NAME); //注册GDAL gdal.AllRegister(); //支持中文路径 gdal.SetConfigOption("gdal_FILENAME_IS_UTF8", "YES"); //只读方式读取数据 Dataset ds=gdal.Open(INPUT_PATH,gdalconstConstants.GA_ReadOnly); //判断是否非空 if(ds==null||ds.GetRasterCount()==0){ return; } int xSize=ds.getRasterXSize(); int ySize=ds.getRasterYSize(); byte[] dataArrayR = new byte[xSize*ySize]; byte[] dataArrayG = new byte[xSize*ySize]; byte[] dataArrayB = new byte[xSize*ySize]; int[] bandR=new int[]{1}; a3a8 int[] bandG=new int[]{2}; int[] bandB=new int[]{3}; int dataType = ds.GetRasterBand(1).GetRasterDataType(); ds.ReadRaster(0, 0, xSize, ySize, xSize, ySize, dataType, dataArrayR, bandR, 0); ds.ReadRaster(0, 0, xSize, ySize, xSize, ySize, dataType, dataArrayG, bandG, 0); ds.ReadRaster(0, 0, xSize, ySize, xSize, ySize, dataType, dataArrayB, bandB, 0); //GDAL to Mat Mat originalImage=new Mat(ySize, xSize, CvType.CV_8UC3); for(int j=0;j<ySize;j++){ for(int k=0;k<xSize;k++){ originalImage.put(j, k, new byte[]{dataArrayB[j*xSize+k],dataArrayG[j*xSize+k],dataArrayR[j*xSize+k]}); } }
相关文章推荐
- JAVA调用GDAL实现影像格式转换,以tif to jpg为例
- JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
- JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
- JAVA 实现jpg/tif/bmp 等图片格式互相转换,解决RenderedOp资源不能释放
- 使用JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
- java通过jacob来读取word转换为htm格式
- opencv中mat,cvmat,Iplimage结构体定义以及格式互相转换。
- Opencv读取mat和cvMat元素&&Mat与IplImage和CvMat类型之间的相互转换
- java 图片文件格式转换(多页tif转jpg 、jpg转tif)
- 识别常见编码格式文件并转换成UTF-8编码 的java实现 源码
- 读取、回收和重用:使用 Excel、XML 和 Java 技术轻松搞定报告在 XML 和 Excel 报告格式之间转换(2)
- OpenCV图像MAT格式转换为QT中QImage并显示
- C#使用GDAL将tif图像转换为jpg、bmp、png和gif格式的图像
- 如何实现将java中Double类型的科学计数法转换为指定格式显示?
- java通过jacob来读取word转换为htm格式
- opencv中mat,cvmat,Iplimage结构体定义以及格式互相转换。
- Java 转换png jpg gif格式图片的相互转换的实现
- part based model 模型 mat结构模型转换为opencv中的xml的格式
- Java实现音频格式转换 WAV---mp3,可使音频压缩
- opencv中mat,cvmat,Iplimage结构体定义以及格式互相转换