参考:https://baijiahao.baidu.com/s?id=1607856881407380092&wfr=spider&for=pc

首先进行opencv安装,先安装Anaconda3,配置好环境,在Anaconda3的python3中安装opencv-python。

1、选择遥感影像,本例中选择的遥感影像为南京市玄武湖,影像如下:

(实际应用中湖泊数据可能不会这么分明,需要更近一步研究)

2、导入cv2和numpy,读取影像

import cv2
import numpy
image = cv2.imread("xwh.jpg")

3、获取湖泊区域的BGR值,对应三个数值,可以利用软件提取,软件如:jcpicker.exe,本例中获取的湖泊区域的BGR值分别为90,98,67。提取在该值上下浮动20(可自行修改)区间的值,作为影像二值化的依据。(补充:影像必须先进行灰度化,然后才进行二值化处理。)对于在湖泊BGR区间内的影像部分赋值为白色(255),其余部分赋值为黑色(0).代码如下:

BGR = numpy.array([90,98,67])
upper = BGR + 20
lower = BGR - 20
mask = cv2.inRange(image,lower,upper)
cv2.imshow("Mask",mask)

结果命名为掩膜数据,结果如下图:

4、OpenCV提供了cv2.findContours()函数提取二值化图像的轮廓。对上面生成图片上执行这个函数就可以返回该图片的区域轮廓。由于执行该函数时会直接修改图像,因此我们复制一份图像之传给cv2.findContours();同时,OpenCV提供了cv2.drawContour()函数绘可以把轮廓叠加到另一张图片上。

使用cv2.findContours()函数对mask图片提取轮廓,并调用cv2.drawContour()把轮廓叠加在原始图像,代码如下:

(_,contours,hicrarchy) = cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
print("number of contours:%d" %(len(contours)))
alllakesImage = image.copy()
cv2.drawContours(alllakesImage,contours,-1,(0,0,255),2)
cv2.imshow("Image of All Lake",alllakesImage)

结果如下图所示:

5、在获取的轮廓结果图中我们可以看到,存在众多的细小板块,统计结果显示number of contours:7067,其中contours.sort(key=len,reverse=True)可以对细小斑块的面积进行排序,代码如下:

theLargestLake = image.copy()
contours.sort(key=len,reverse=True)
cv2.drawContours(theLargestLake,[contours[0]],-1,(0,0,255),2)
cv2.imshow("Image of the Largest Lake",theLargestLake)

结果如下图:

注意:由于openvc3中cv2.imshow()函数显示的结果存在闪退的情况,在最后显示图的地方添加cv2.waitKey(),表示一直等待,如果其后存在代码,不执行。

未完…….正在继续………

由于上面步骤3中存在,手动赋予像素值的操作,因此考虑,是否可以通过统计直方图,自动找出该值,即将R、G、B三色道直方图中的峰值处对应的灰度值作为输入。
1、首先对影像进行三通道分离。代码如下:

image = cv2.imread("xwh.jpg")
# 转换为浮点数进行计算
fsrc = np.array(image, dtype=np.float32) /255.0
band = cv2.split(fsrc)

其中band是一个数组,即band[b,g,r].

2、定义一个函数,分别对三色道的直方图分别进行峰值处的灰度值提取的操作。

def histing(x):#求取最大值和最小值 (minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(band[x])#计算直方图   hist = cv2.calcHist([band[x]], [0], None, [256], [minVal, maxVal])n = hist.tolist().index(max(hist)plt.plot(hist)plt.show()return n

结果如下:



利用这三个值作为输入值,分割的结果如下图,相比手动而言,效果还是差些。结果如下:

在遥感影像分类中,现阶段计算机能做的结果还是不如人手动进行的效果好,虽然有些公司或者个人在鼓吹AI、人工智能进行分割效果很好之类,其研究范围是个例,不具有广泛的适用性。

遥感影像分割,在现在以及将来都是研究热点,技术难题尚未解决,期待各位同志继续努力….

基于python3+opencv3遥感影像的湖泊边界提取相关推荐

  1. ENVI经验|基于多源遥感影像的红树林范围提取4-面向对象分类

    传统的基于像素的遥感影像处理方法都是基于遥感影像光谱信息极其丰富,地物间光谱差异较为明显的基础上进行的.对于只含有较少波段的高分辨率遥感影像,传统的分类方法,就会造成分类精度降低,空间数据的大量冗余, ...

  2. ENVI经验|基于多源遥感影像的红树林范围提取3-监督分类

    监督分类,又称训练分类法,用被确认类别的样本像元去识别其他未知类别像元的过程.它就是在分类之前通过目视判读和野外调查,对遥感图像上某些样区中影像地物的类别属性有了先验知识,对每一种类别选取一定数量的训 ...

  3. ENVI软件|基于多源遥感影像的红树林范围提取1-数据获取及处理

    红树林是一种生长在海岸带的木本植物群落,主要分布在热带.亚热带地区海岸带的海湾.河口等海域,是国际上生物多样性的重点保护对象.红树林具有提供产品.防风御浪.净化环境.保护海岸线.维持生物多样性等生态功 ...

  4. 从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类

    更多资讯,请关注:Ai尚研修科研技术动态 公众号 我国高分辨率对地观测系统重大专项已全面启动,高空间.高光谱.高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全 ...

  5. 基于内容的遥感影像场景检索

    基于内容的遥感影像场景检索(一) (一)基础练习 1.从遥感影像文件夹里批量读取遥感影像,并计算其灰度直方图特征 ①首先学习matlab批量读取文件 (由于之前此部分没认真学习,所以试图理解每一个函数 ...

  6. 基于遥感影像的耕地地块提取相关论文、代码以及相关开源数据集

    文章目录 前言 2000 (传统方法) Agricultural Field Extraction from Aerial Images Using a Region Competition Algo ...

  7. 批量处理|基于ENVI的遥感影像批量裁剪工具

    遥感影像裁剪的目的是将研究之外的区域去除,常用的方法是按照行政区划边界或者自然区划边界进行影像裁剪,在基础数据生产中,还经常要进行标准分幅裁剪. ENVI软件支持规则裁剪(矩形范围)和不规则裁剪(任意 ...

  8. 原创程序|基于GDAL的遥感影像批量处理工具介绍(三)

    本文主要介绍基于C#+GDAL-Python实用工具开发的遥感影像批量处理工具,该工具目前主要包括影像批量切片生成KML文件和影像批量切片生成Tiles文件.该工具.Net框架版本为4.0,GDAL版 ...

  9. 基于ArcGIS的遥感影像批量裁剪

    处理遥感影像的同学,尤其是长时间序列的遥感影像,经常需要对遥感影像,按某一区域进行批量的裁剪. 本文使用ArcGIS 自带的Python 函数,采用Shapefile 文件,对某一文件下所有的影像按照 ...

最新文章

  1. CentOS下添加新硬盘并分区格式化
  2. OpenGL书和资源
  3. 跟我一起写 Makefile(整理版)
  4. xil_printf打印遇到的问题
  5. 史上最完整的iOS DIY framework 详细教程(一)
  6. 2019年CSDN博客前十排名
  7. linux vino vnc,Ubuntu下包含2种远程桌面的方式:VINO-Server以及VNC Server。 .
  8. JavaScript学习(六十九)—正则表达式实训题
  9. 关于equls和endsWith的悲哀(以后有equals的位置要仔细看一下了)!
  10. linux怎么把mysql数据库备份还原,MySQL数据库备份和还原
  11. BZOJ 1013 球形空间产生器(高斯消元)
  12. LayaAir UI 组件 # Button 按钮
  13. 分销商城平台开发现成源码
  14. java中如何获取一个字符串的长度呢?
  15. 经典网页设计:30个独具匠心的单页网站设计案例
  16. maven plugins 飘红问题
  17. 这里记录几个国外的网站
  18. 关于Remoting
  19. python3 钉钉 加签名 钉钉群机器人巡检告警 脚本
  20. 使用 QTLtools 进行 PCA 分析

热门文章

  1. CCIE-EI 思科企业基础架构专家
  2. 递归查询树形结构数据
  3. 预渲染与服务端渲染的区别
  4. 实用Android框架
  5. Windows命令:ipconfig
  6. 码云+idea(代码托管)
  7. 知识付费的七种变现方式
  8. 服务端学习笔记(1)
  9. 微软浏览器图标变空白,解决方案,亲测有效!
  10. 计算机的硬件组成(详)