首页 文章 精选 留言 我的

精选列表

搜索[计算机组成原理],共10002篇文章
优秀的个人博客,低调大师

Saltstack原理(1)

SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。 通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,SaltStack是运维人员提高工作效率、规范业务配置与操作的利器。 Saltstack安装(2) Saltstack远程执行命令(3) Saltstack常用模块及API(4) Saltstack的grains组件(5) 2、特性 (1)、部署简单、方便; (2)、支持大部分UNIX/Linux及Windows环境; (3)、主从集中化管理; (4)、配置简单、功能强大、扩展性强; (5)、主控端(master)和被控端(minion)基于证书认证,安全可靠; (6)、支持API及自定义模块,可通过Python轻松扩展。 本文转自 转身撞墙角 51CTO博客,原文链接:http://blog.51cto.com/chentianwang/1731919

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

计算机视觉处理三】图像基本处理

图像基本处理 1、图像切片 在前面我们了解到opencv中的图像实际上就是一个ndarray数组,我们对ndarray数组进行操作就是对图像进行操作。我们先来看一下切片查找,这是我们非常常用的一个操作。 (1)一维数组的切片 我们来看看切片的语法,对于一维的数组我们可以通过下面的操作获取第0个到第4个元素: array[0:5] 从上面可以知道我们的切片操作是左闭右开的。上面的切片操作我们可以简写一下: array[:5] 如果我们没有设置第一个值,则表示从头开始切片。当然我们还可以省略第二个值,这时含义就是取到最后一个元素,比如下面的操作: array[3:] 我们用一个实际的例子来看看切片操作: import numpy as np# 创建一个一维的ndarray数组,数据为[0, 1, 2, 3, 4, 5, 6, 7]array = np.array([0, 1, 2, 3, 4, 5, 6, 7])# 取0到4个元素print(array[0:5])print(array[:5])# 取第3个到最后一个元素print(array[3:]) 输出内容如下: [0 1 2 3 4][0 1 2 3 4][3 4 5 6 7] 我们可以把切片操作总结为: # 左闭右开array[start: end-1] 当我们以第0个开始,获取以最后一个结尾的话,对应的值是可以省略的。 (2)二维数组的切片 在图像处理中,我们更关注二维数组的切片。它的语法和一维数组很相似。为了方便理解,我们直接使用图片来进行切片,比如下面这张图片: 二维数组切片的语法如下: array[start:end-1, start:end-1] 现在我们需要明确一点,左边部分是对高的截取,右边部分是对宽的截取。那现在我要截取图片的左半部分的操作应该如下: import cv2# 读取图片img = cv2.imread('xyql.jpg')# 获取图片的宽,并除2width = img.shape[1]//2# 对图片进行切片,截取左半部分left = img[:, :width]# 显示图像三步骤cv2.imshow('left', left)cv2.waitKey(0)cv2.destroyAllWindows() 其中切片的代码是: left = img[:, :width] 左边的是截取高,我们需要全部截取,因此两个值都可以省略。右边我们只需要截取左半部分,因此左边的值可以省略,右边的值则是我们前面计算到的宽度。下面是效果图: 这里需要注意一点,彩色图像其实是三维的,但是我们没有操作第三个维度。 2、图片区域替换 既然我们知道如何切片,那我们就可以对指定区域进行替换。不过需要注意替换和被替换的区域形状要相同,即shape属性要一样。比如我要把图片左上角100*100的区域替换成白色,那我可以进行如下操作: import cv2import numpy as npimg = cv2.imread('1.jpg')# 创建一个100*100的白色图像replace_img = np.ones((100, 100), dtype=np.uint8)*255# 将图片左上角100*100区域替换img[:100, :100] = replace_img 运行后会发现报了如下错误: img[:100, :100] = replace_imgValueError: could not broadcast input array from shape (100,100) into shape (100,100,3) 它的意思是不能将(100, 100)的图像转换成(100, 100, 3)的图像,也就是形状不匹配。在替换时我们需要特别注意这一点,我们将上面的代码进行一些修改: import cv2import numpy as npimg = cv2.imread('xyql.jpg')replace_img = np.ones((100, 100, 3), dtype=np.uint8)*255img[:100, :100] = replace_img *这样我们就可以成功替换了,效果如下: 其实用上面的操作我们可以实现一个“双胞胎”效果,下面我们就来看看吧。 3、实现“双胞胎”效果 我们先准备两张图片,保证相机在没有移动的情况下拍两张图片,比如下面两张: 这是我刚拍的两张图片,因为相机没有移动,所以背景应该是一样的。我们可以通过下面的代码把两个梦幻合并到一张图片上: import cv2# 读取两张图片img1 = cv2.imread('mh1.JPG')img2 = cv2.imread('mh2.JPG')# 求出宽的中间值mid = img1.shape[1]//2# 把mh2的右半边替换到mh1的右半部分img1[:, mid:] = img2[:, mid:]# 将拼接后的图片保存到本地cv2.imwrite('result.jpg', img1) 上面代码非常简单,我们只需要关注下面这句: img1[:, mid:] = img2[:, mid:] img1和img2的shape都是一样的,截取的区域也是一样的,所以进行替换没有上面问题。最后我们通过: cv2.imwrite('result.jpg', img1) 对图片进行保存。因为我们是直接对img1进行操作,因此我们直接保存img1就好了。下面是我们的效果图: 这里需要多说一句,我只有一个梦幻。 4、numpy生成数组 在上一篇中我们使用下面的代码生成了一个数组: im = np.zeros((3, 3, 1), dtype=np.uint8) 对于数组numpy来说我们是生成一个数组,但是对opencv来说是生成一张图片。下面我们来看看numpy生成数组的一些操作。 (1)np.ones 我们可以通过numpy的ones函数生成一个元素全为1的数组,比如下面的代码: np.ones((100, 100), dtype=np.uint8) ones接收两个参数,第一个参数是数组的shape,第二关则是数组元素的类型,其中np.uint8表示无符号的8位整型,即范围在(0-255)之间。我们可以用opencv显示一下上面的图片: import cv2import numpy as np# 生成一个100*100的图片,每个元素的值都为1img = np.ones((100, 100), dtype=np.uint8)cv2.imwrite('result.jpg', img) 效果图如下: 因为1很接近0,所以图片的颜色接近于黑色。我们可以通过下面的操作对每个元素进行操作: import cv2import numpy as npimg = np.ones((100, 100), dtype=np.uint8) * 127cv2.imwrite('result.jpg', img) 我们生成元素为1的数组后,如何进行乘127的操作,这样就可以对每个元素进行乘127操作。这时候数组的每个元素都是127,下面是显示效果: 当然我们的图片是二维的,对opencv来说是一个灰度图。如果想要生成一个彩色图像,我们可以生成一个三维的图像,后续我们会继续讲解。 (2)np.zeros np.zeros和ones没有上面区别,只是它元素的内容是0。我们来简单看一下: import numpy as npimg = np.zeros((5, 5), dtype=np.uint8)print(img) 为了方便看,我们直接生成一个简单的数组,输出结果如下: [[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]] 其它的都不再细说了。 本文分享自微信公众号 - ZackSock(ZackSock)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

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

Spring

Spring

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册