博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PIE SDK图像裁剪
阅读量:6679 次
发布时间:2019-06-25

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

 

1.算法功能简介

    图像裁剪的目的是获取选定的影像范围区域。图像裁切工具提供像素范围裁切、矢量裁切、栅格图像裁切和几何图元裁切四种方式。 像素范围裁切是基于像素坐标获取矩形裁切区域的裁切方式;矢量裁切是基于矢量地理坐标获取任意形状裁切区域的裁切方式; 栅格图像裁剪是基于栅格文件的坐标获取裁剪区域的裁剪方式; 几何图元裁切是基于交互方式在主视图上绘制多边形来获取裁切范围的裁切方式。

    PIE支持算法功能的执行,下面对图像裁剪算法功能进行介绍。

2.算法功能实现说明

2.1. 实现步骤

第一步

算法参数设置

第二步

算法执行

2.2.  算法参数

算法名称

图像裁剪

C#算法DLL

PIE.CommonAlgo.dll

C#算法名称

PIE.CommonAlgo.ImageClipAlgo

参数结构体

DataPreImgClip_Exchange_Info

参数说明

InputFilePath

String

输入文件

(*.tif;*.tiff;*.bmp;*.img;*.jpg;*.ldf)

Type

Int

裁剪类型

小于等于0为以栅格来裁剪,等于1为用shp文件或者几何范围来裁剪

ShpFilePath

String

如果以shp文件裁剪,需要输入的shp文件路径

OutputFilePath

String

输出文件路径

(*.tif;*.tiff; *.img)

FileType

String

根据输出类型获得文件编码类型

.tif/.tiff——GTiff

.img—————HFA

其他—————ENVI

XStart

Int

裁剪范围起始X

XEnd

Int

裁剪范围终点X

YStart

Int

裁剪范围起始Y

YEnd

Int

裁剪范围终点Y

bInvalidValue

bool

是否设置无效值

InvalidValue

double

无效值

FuncName

String

功能名称

ListBands

IList<Int>

输出裁剪影像的波段

Geometry

IGeometry

裁剪几何形状

2.3. 示例代码

项目路径

百度云盘地址下/PIE示例程序/10.算法调用/图像预处理/ClipAlgoDemo.Form1

数据路径

百度云盘地址下/PIE示例数据/ 栅格数据/04.World/World.tif

百度云盘地址下/PIE示例数据/ 矢量数据/Shape/省级行政区.shp

视频路径

百度云盘地址下/PIE视频教程/10.算法调用/图像预处理/图像裁剪算法.avi

示例代码

1         //(一)通过栅格范围裁剪  2         ///   3         ///图像裁剪算法测试,本算法实现了将World.tif根据起始点(0,0)到终止点(500,500)的矩形范围裁剪生成clip_xy.tif文件  4         ///   5         private void button_xy_Click ()  6         {  7             #region 1、参数设置  8             //Clip裁剪  9             PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info(); 10  11             info.InputFilePath = @"D:\Data\World.tif";  //待裁剪影像 12             PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly); 13             if (rDataset == null) return; 14             int count=rDataset.GetBandCount(); 15             List
list = new List
{ }; 16 for (int i = 0; i < count; i++) { 17 list.Add(i); 18 } 19 info.listBands = list; 20 info.XFactor = 1; 21 info.YFactor = 1; 22 info.bInvalidValue = false; 23 info.OutputFilePath = @"D:\Data\clip_xy.tif"; //裁剪保存结果 24 info.Type = 0; // (等于0表示通过栅格范围裁剪) 25 info.XStart = 0; 26 info.XEnd = 500; 27 info.YStart = 0; 28 info.YEnd = 500; 29 info.FileType = "GTiff"; //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。; 30 31 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo"); 32 if (algo == null) return; 33 #endregion 34 //2、算法执行 35 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents; 36 algo.Name = "影像裁剪"; 37 algo.Params = info; 38 //PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo); 39 //bool OK = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo); 40 bool OK = algo.Execute(); 41 MessageBox.Show("裁剪成功!"); 42 } 43 //(二)使用shape文件裁剪 44 ///
45 ///图像裁剪算法测试,本算法实现了将World.tif根据省级行政区.shp文件裁剪生成clip_shp.tif文件 46 /// 47 private void button_shp_Click () 48 { 49 #region 1、参数设置 50 //Clip裁剪 51 PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info(); 52 //参数设置 53 string featurePath = @"D:\Data\省级行政区.shp"; //裁剪的几何要素 54 info.InputFilePath = @"D:\Data\World.tif"; //待裁剪影像 55 PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly); 56 if (rDataset == null) return; 57 int count = rDataset.GetBandCount(); 58 List
list = new List
{ }; 59 for (int i = 0; i < count; i++) 60 { 61 list.Add(i); 62 } 63 info.listBands = list; 64 info.bInvalidValue = false; 65 info.OutputFilePath = @"D:\Data\clip_shp.tif"; //裁剪保存结果 66 info.ShpFilePath = featurePath; 67 info.Type = 1; // (等于1表示使用shape文件裁剪) 68 info.FileType = "GTiff"; //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。; 69 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo"); 70 if (algo == null) return; 71 #endregion 72 //2、算法执行 73 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents; 74 algo.Name = "影像裁剪"; 75 algo.Params = info; 76 PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo); 77 //bool OK = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo); 78 //bool OK = algo.Execute(); 79 MessageBox.Show("裁剪成功!"); 80 } 81 //(三)使用几何范围裁剪 82 ///
83 ///图像裁剪算法测试,本算法实现了将World.tif根据省级行政区.shp文件中索引为0的geometry裁剪生成clip_shp.tif文件 84 /// 85 private void button_geometry_Click () 86 { 87 #region 1、参数设置 88 //Clip裁剪 89 PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info(); 90 //参数设置 91 string featurePath = @"D:\Data\省级行政区.shp"; //裁剪的几何要素 92 PIE.DataSource.IFeatureDataset fDataset = PIE.DataSource.DatasetFactory.OpenFeatureDataset(featurePath); 93 PIE.DataSource.IFeature feature = fDataset.GetNextFeature(); 94 fDataset.ResetReading(); 95 PIE.Geometry.IGeometry geometryClip = null; 96 while (feature != null) 97 { 98 geometryClip = feature.Geometry; 99 feature = fDataset.GetNextFeature();100 break;101 }102 info.InputFilePath = @"D:\Data\World.tif"; //待裁剪影像103 PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly);104 if (rDataset == null) return;105 int count = rDataset.GetBandCount();106 List
list = new List
{ };107 for (int i = 0; i < count; i++)108 {109 list.Add(i);110 }111 info.listBands = list;112 info.bInvalidValue = false;113 info.OutputFilePath = @"D:\Data\clip_geometry.tif"; //裁剪保存结果114 info.Type = 2; // (等于2表示使用几何范围裁剪)115 info.Geometry = geometryClip;116 info.FileType = "GTiff"; //Tiff数据的FileTypeCode为“GTiff”,IMG数据的FileTypeCode为"HFA",其他格式的为"ENVI"。;117 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo");118 if (algo == null) return;119 #endregion120 //2、算法执行121 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents;122 algo.Name = "影像裁剪";123 algo.Params = info; PIE.SystemAlgo.AlgoFactory.Instance().AsynExecuteAlgo(algo);124 //bool OK = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);125 //bool OK = algo.Execute();126 MessageBox.Show("裁剪成功!"); 127 }
View Code

2.4. 示例截图

(一)通过栅格范围裁剪

(二)使用shape文件裁剪

(三)使用几何范围裁剪

 

转载于:https://www.cnblogs.com/PIESat/p/10186014.html

你可能感兴趣的文章
拿到了2013年10月微软MVP奖杯
查看>>
Windows Server 2012正式版RDS系列⑦
查看>>
字段校验器配置风格
查看>>
Office 2013新特性
查看>>
我的友情链接
查看>>
《OSSIM开发者手册》稿件即将完成。
查看>>
数据仓库入门(实验9)查询多维数据集
查看>>
oracle常用网址
查看>>
光棍节程序员闯关秀过关攻略
查看>>
大话“自动化测试框架思想与构建”
查看>>
SQL Server Profiler – 存储过程调试
查看>>
SQL Server 博文汇总
查看>>
市场活动课件:SQL Server 索引优化
查看>>
Linux程序包管理rpm命令的使用解析
查看>>
什么是证书颁发机构(CA)
查看>>
php-fpm定义成集群资源时报错解决方法
查看>>
IDispose和Finalize的区别和联系
查看>>
面试中如何谈工资问题
查看>>
Redis主从配置
查看>>
cocos2d-x学习之CCDictionary中的一个小问题
查看>>