首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

Python-OpenCV学习(十一)分水岭算法进行图像分割

分水岭算法进行图像分割:分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明。在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇合处构筑大坝,即形成分水岭。例子: import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread('basil.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) # noise removal kernel = np.ones((3,3),np.uint8) opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2) # sure background area sure_bg = cv2.dilate(opening,kernel,iterations=3) # Finding sure foreground area dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5) ret, sure_fg = cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0) # Finding unknown region sure_fg = np.uint8(sure_fg) unknown = cv2.subtract(sure_bg,sure_fg) # Marker labelling ret, markers = cv2.connectedComponents(sure_fg) # Add one to all labels so that sure background is not 0, but 1 markers = markers+1 # Now, mark the region of unknown with zero markers[unknown==255] = 0 markers = cv2.watershed(img,markers) img[markers == -1] = [255,0,0] plt.imshow(img) plt.show() 结果:先导入模块加载图像,图像转化为灰度图片: import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread('basil.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 设置一个阈值,将灰度图像分为两部分:黑色部分和白色部分: ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) 通过morphologyEx变化来去除噪声数据,是对图像进行膨胀之后再进行腐蚀操作提取图像特征: kernel = np.ones((3,3),np.uint8) opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2) 得到大部分前景:通过distanceTeansform来获取最有可能的前景区域,越是远离背景区域的边界越可能是前景,得到结果后用一个阈值来确定前景: dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5) ret, sure_fg = cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0) 接下来确定前景和背景重叠部分: sure_fg = np.uint8(sure_fg) unknown = cv2.subtract(sure_bg,sure_fg) 设定“栅栏”来阻止谁汇聚,通过connected-Components函数完成: ret, markers = cv2.connectedComponents(sure_fg) 在背景区域上加一,将unknown区域设为0: markers = markers+1 markers[unknown==255] = 0 最后通过watershed函数: markers = cv2.watershed(img,markers) img[markers == -1] = [255,0,0]

优秀的个人博客,低调大师

DC学院爬虫学习笔记(三):使用Requests爬取豆瓣短评

Requests库介绍: Requests库官方的介绍有这么一句话:Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。 这句话直接并霸气地宣示了Requests库是python最好的一个HTTP库。 Requests的简单用法 Requests库的七个主要方法 Requests.get的用法: import requests #导入Requests库 r = requests.get(url) #使用get方法发送请求,返回包含网页数据的Response并存储到Response对象r中 Response对象的属性: r.status_code:http请求的返回状态,200表示连接成功(HTTP状态码) r.text:返回对象的文本内容 r.content:猜测返回对象的二进制形式 r.encoding:分析返回对象的编码方式 r.apparent_encoding:响应内容编码方式(备选编码方式) 以知乎为例,展示上述代码的使用: >>> import requests >>> r = requests.get('https://www.zhihu.com/') >>> r.status_code 500 >>> r.text #省略 >>> r.content #省略 >>> r.encoding 'ISO-8859-1' >>> r.apparent_encoding 'ascii' 实战 分析豆瓣短评网页 首先通过浏览器工具来分析网页的加载方式。只有同步加载的数据才能直接在网页源代码中直接查看到,异步加载的数据直接查看网页源代码是看不到的。 把JavaScript由“允许”改为“阻止”,重新刷新页面,若网页正常加载,说明该网页的加载方式是同步加载,若网页没有正常加载,说明该网页的加载方式是异步加载。 使用Requests下载数据的步骤 导入Requests库 输入url 使用get方法 打印返回文本 抛出异常 import requests #导入Requests库 url = ' https://book.douban.com/subject/27147922/?icn=index-editionrecommend' #输入url r = requests.get(url,timeout=20) #使用get方法 ##print(r.text) #打印返回文本 print(r.raise_for_status()) #抛出异常 None 爬取网页通用框架 定义函数 设置超时 异常处理 调用函数| #定义函数 def getHTMLText(url): try: r = requests.get(url,timeout=20) #设置超时 r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: #异常处理 return "产生异常" if __name__ == '__main__': url = " " print(getHTMLText(url)) #调用函数 爬虫协议 什么是爬虫协议 爬虫协议,也被叫做robots协议,是为了告诉网络蜘蛛哪些页面可以抓取,哪些页面不能抓 如何查看爬虫协议 在访问网站域名后加上robots.txt即可,例如查看百度网站的爬虫协议:https://www.baidu.com/robots.txt 爬虫协议属性 拦截所有的机器人: User-agent: * Disallow: / 允许所有的机器人: User-agent: * Disallow: 爬虫建议 爬取互联网公开数据 尽量放慢你的速度 尽量遵循robots协议 不要用于商业用途 不要公布爬虫程序与数据

优秀的个人博客,低调大师

DC学院爬虫学习笔记(五):使用pandas保存豆瓣短评数据

保存数据的方法: open函数保存 pandas包保存(本节课重点讲授) csv模块保存 numpy包保存 使用open函数保存数据 1. open函数用法 使用with open()新建对象 写入数据 import requests from lxml import etree url = 'https://book.douban.com/subject/1084336/comments/' r = requests.get(url).text s = etree.HTML(r) file = s.xpath('//div[@class="comment"]/p/text()') with open('pinglun.txt', 'w', encoding='utf-8') as f: #使用with open()新建对象f for i in file: # print(i) f.write(i) #写入数据,文件保存在当前工作目录 可以使用以下方法得到当前工作目录或者修改当前工作目录 import os os.getcwd()#得到当前工作目录 'C:\\Users\\Dell' os.chdir()#修改当前工作目录,括号中传入工作目录的路径 2. open函数的打开模式 使用pandas保存数据 1. Python数据分析的工具包 numpy: (Numerical Python的简称),是高性能科学计算和数据分析的基础包 pandas:基于Numpy创建的Python包,含有使数据分析工作变得更加简单的高级数据结构和操作工具 matplotlib:是一个用于创建出版质量图表的绘图包(主要是2D方面) 常见的导入方法: import pandas as pd #导入pandas import numpy as np #导入numpy import matplotlib.pypolt as plt #导入matplotlib 2. pandas保存数据到Excel 导入相关的库 将爬取到的数据储存为DataFrame对象(DataFrame 是一个表格或者类似二维数组的结构,它的各行表示一个实例,各列表示一个变量) to_excel() 实例方法:用于将DataFrame保存到Excel df.to_excel('文件名.xlsx', sheet_name = 'Sheet1') #其中df为DataFrame结构的数据,sheet_name = 'Sheet1'表示将数据保存在Excel表的第一张表中 read_excel() 方法:从excel文件中读取数据 pd.read_excel('文件名.xlsx', 'Sheet1', index_col=None, na_values=['NA']) 3. pandas保存数据到csv文件 导入相关的库 将数据储存为DataFrame对象 保存数据到csv文件 import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(6,3)) #创建随机值并保存为DataFrame结构 print(df.head()) df.to_csv('numpppy.csv') 0 1 2 0 0.028705 -0.351902 -0.821870 1 0.279090 0.577875 -1.283121 2 1.563792 -0.146931 -0.587794 3 -0.272610 -0.342182 0.847883 4 1.380459 0.462965 -1.799529 实战 爬取《小王子》豆瓣短评的数据,并把数据保存为本地的excel表格 import requests from lxml import etree url = 'https://book.douban.com/subject/1084336/comments/' r = requests.get(url).text s = etree.HTML(r) file = s.xpath('//div[@class="comment"]/p/text()') import pandas as pd df = pd.DataFrame(file) df.to_excel('pinglun.xlsx') 爬取《小王子》豆瓣短评前5页的短评数据 import requests from lxml import etree import pandas as pd urls=['https://book.douban.com/subject/1084336/comments/hot?p={}'.format(str(i)) for i in range(1, 6, 1)] #通过观察的url翻页的规律,使用for循环得到5个链接,保存到urls列表中 pinglun = [] #初始化用于保存短评的列表 for url in urls: #使用for循环分别获取每个页面的数据,保存到pinglun列表 r = requests.get(url).text s = etree.HTML(r) file = s.xpath('//div[@class="comment"]/p/text()') pinglun = pinglun + file df = pd.DataFrame(pinglun) #把pinglun列表转换为pandas DataFrame df.to_excel('pinglun.xlsx') #使用pandas把数据保存到excel表格

优秀的个人博客,低调大师

学习笔记:python watchdog运维监控文件系统事件实战

情况介绍 由于公司准备做Jenkins的前端自动化发布,但是前端的Node.js环境不统一,所以暂时先搁置,采用Ftp上传文件更新项目,因此想到了可以采用文件监控的形式来进行自动化上传。Python语言的优越性就体现出来了,其中有很多很棒的库,本篇即将用到的就是watchdog库。 watchdog库介绍 watchdog用来监控指定目录文件的变化,例如添加删除文件或目录,修改文件内容、重命名文件或目录等,每种变化都会产生一个事件,且有一个特定的事件类与之对应,然后再通过事件处理类来处理对应的事件,至于怎么样处理事件完全可以自定义,只需继承事件处理类的基类并重写对应实例方法。 实战准备 1.Python环境(系统自带Python2.7.5) 2.安装watchdog库(pip install watchdog) 实例演示 #!/usr/bin/python # -*- coding:UTF-8 -*- import time from watchdog.observers import Observer from watchdog.events import RegexMatchingEventHandler import commands class MyHandler(RegexMatchingEventHandler): def __init__(self, regex_list=[r”.*”]): super(MyHandler, self).__init__(regex_list) def on_created(self, event): if event.is_directory: pass else: print(event.event_type, event.src_path) def on_deleted(self, event): if event.is_directory: pass else: print(event.event_type, event.src_path) def on_modified(self, event): if event.is_directory: pass else: print(event.event_type, event.src_path) node = event.src_path.split(‘/’,3)[2] if node == “cp”: commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_cp.yml’) elif node == “genpindao”: commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_genpindao.yml’) elif node == “login”: commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_login.yml’) elif node == “ucenter”: commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node_ucenter.yml’) else: commands.getstatusoutput(‘ansible-playbook /mm/node/tasks/node.yml -e node=’+node) def on_moved(self, event): print(“move”, event.src_path, event.dest_path) if __name__ == “__main__”: reges = [r”.*\.c”, r”.*\.h”, r”.*\.cpp”] event_handler = MyHandler(reges) observer = Observer() observer.schedule(event_handler, “/node_ftp/”, recursive=True) observer.start() try: while True: time.sleep(2) except KeyboardInterrupt: observer.stop() observer.join() 实例分析 watchdog主要采用观察者模型。主要有三个角色:observer,event_handler,被监控的文件夹。三者原本是独立的,主要通过observer.schedule函数将三者串起来,意思为observer不断检测调用平台依赖代码对监控文件夹进行变动检测,当发现改变时,通知event_handler处理。 关键点: 1.on_modified方法,是文件有变化触发的函数,上传Ftp目录后就需要调用此方法。 2.event是获取具体文件的路径,文中是为了获取具体的项目名称而进行的目录处理。 3.commands.getstatusoutput方法是调用系统的Shell命令。 4.observer.schedule方法第二个参数就是监控的具体的目录。 Tips:最后可以推荐读者有时间可以阅读一下watchdog的源码,写的清晰易懂而且架构很好。

优秀的个人博客,低调大师

DC学院学习笔记(十三):探索性数据分析实践

还是用iris数据集举例,一起来完成对它的探索性数据分析吧!(也就是画个图,瞅瞅长的啥样子) import pandas iris = pandas.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data') iris.columns=['sepal_length','sepal_width','petal_length','petal_width','species'] 绘图的基本指令 先画图初步了解一下数据的样子 import seaborn %matplotlib inline seaborn.countplot(x="species",data=iris) 可以看出三类别的花是很平均的,每种各占50个 seaborn.barplot(x='species',y='petal_length',data=iris) setosa这种花的花瓣长度明显小于其他两种 seaborn.boxplot(x='species',y='petal_length',data=iris) 这样就更清楚了,甚至我们可以通过花瓣长度这样一种指标来在我们的150个训练集中区别出setosa这种花 seaborn.distplot(iris['petal_width']) 分类绘图 #Pandas库对类别进行选取,然后进行画图 iris_vir=iris[iris.species == 'Iris-virginica'] iris_s=iris[iris.species == 'Iris-setosa'] iris_ver=iris[iris.species =='Iris-versicolor'] #参数赋值,加上label&图例&设置坐标轴范围,xlim设置x轴范围,ylim设置y轴范围 seaborn.distplot(iris_vir['petal_width'],label='vir').set(ylim=(0,15)) seaborn.distplot(iris_s['petal_width'],label='s') seaborn.distplot(iris_ver['petal_width'],label='ver').legend() #FacetGrid 从数据集不同的侧面进行画图,hue指定用于分类的字段,使得代码会更加简洁 g=seaborn.FacetGrid(iris,hue='species') g.map(seaborn.distplot,'petal_width').add_legend() #尝试修改row/col参数,替代hue参数,row:按行展示,col:按列展示 g=seaborn.FacetGrid(iris,row='species') g.map(seaborn.distplot,'petal_width').add_legend() #画出线性回归的曲线 seaborn.regplot(x='petal_width',y='petal_length',data=iris) #分类画线性回归 g = seaborn.FacetGrid(iris,hue='species') #设置坐标轴范围 g.set (xlim=(0,2.5)) g.map(seaborn.regplot,'petal_width','petal_length').add_legend() #不显示拟合曲线,用matplotlib画散点图 import matplotlib.pyplot as plt g = seaborn.FacetGrid(iris,hue='species') g.map(plt.scatter,'petal_width','petal_length').add_legend() ok,这样就完成了我们对iris数据集的探索性数据分析,也就是画图瞅瞅长得啥样。

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册