python+OpenCV图像处理(一)读取、复制、显示、保存

前 言

       从2017年入坑人工智能领域开始,就被这一领域深深的所吸引,虽然到现在已经踩了不少坑,但总算有了不少的收获,深感不虚此行,借助强大的python让我快速的向着这一领域靠近,现在流行比较广的人工智能应用,比如:图像识别,语音识别,文本情感分析,人体行为分析等等。在金融、安全、智能推荐等等,凡是我们能想到的领域,都可以安插人工智能的应用,对推进万物互联、万物互通的未来智能具有深刻影响,可以说是大势所趋。

      由于人类语言的千变万化,和对语言分析应用的单一,导致在语音、语义方面远不如图像分析应用的广泛。OpenCV是一个专门对图像进行处理的库,在此后的学习中,我们会深刻认识到它的强大。借助强大的互联网,集万众之所长,完成学习任务。

图像的读取、复制、显示、保存

(一)认识图像、读取图像

所谓的图像就是一个数组,所有对图像的处理就是对数字的处理

# 导入包
import cv2
import numpy as np
img = cv2.imread('rose.jpg')
print(img)
print(np.shape(img))

输出结果为:

[[[ 65 134 107][ 65 134 107][ 65 134 107]..., [ 33  90  69][ 33  90  69][ 31  90  69]][[ 64 133 106][ 64 133 106][ 64 133 106]..., [ 33  90  69][ 33  90  69][ 31  90  69]][[ 64 132 107][ 64 132 107][ 63 131 106]..., [ 33  90  69][ 33  90  69][ 31  90  69]]..., [[  1  75  49][  2  76  50][  0  77  50]..., [ 24  62  66][ 25  63  67][ 27  65  69]][[  1  75  49][  2  76  50][  0  77  50]..., [ 19  57  61][ 21  59  63][ 22  60  64]][[  1  75  49][  2  76  50][  0  77  50]..., [ 17  55  59][ 19  57  61][ 20  58  62]]]
(972, 1024, 3)

(二)显示图像

接下来我们来让读取的图像显示出来,刚才的图片太大了,我将图片弄小了一些

# 读取图片
img = cv2.imread('rose1.jpg')
# 先创建一个窗口
cv2.namedWindow('Image')
# 在窗口中显示图像
cv2.imshow('Image', img)
# 最后还要写一句代码,这样就可以使窗口始终保持住
cv2.waitKey(0)

运行结果为:

 

在读取图片中,imread(‘图片地址’,‘模式参数’)函数可以来控制所读取图片的模式。

模式参数:

0:读入的为灰度图像(即使读入的为彩色图像也将转化为灰度图像)

1:读入的为彩色图像(默认)

img = cv2.imread('rose1.jpg', 0)

 

cv2.destroyAllWindows()

最后别忘了释放窗口,养成良好习惯。

(三)复制图像

img1 = img.copy()

(四)保存图像

保存图像也非常简单

cv2.imwrite('rose_copy.jpg', img1)

第一个参数是保存图像的地址以及文件的名字,第二个参数是所要保存的图像数组。

其实它还有第三个参数,针对特定的图像格式,对于JPEG,其表示的是图片的quality,用0-100的整数表示,默认为95。当然,你如果把参数设置的超过100也不会出错,但到100已经达到图片本身的最高质量了。cv2.IMWRITE_JPEG_QUALITY的类型为int类型,符合图像数组为整数的要求,不用再更改类型。

cv2.imwrite('rose_copy1.jpg', img1, [cv2.IMWRITE_JPEG_QUALITY, 2])

 

对于PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3.

cv2.imwrite("rose1_test.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 0])
cv2.imwrite("rose2_test.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 9])

 

 

 

 

其实,还有很多有趣的操作,就不介绍了,需要用的时候在进行学习,知道这两个比较常用的。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python+OpenCV图像处理(二)图像像素的访问、通道的合并与分离

图像像素的访问、通道的合并与分离 (一)像素访问 在第一篇博客中,向大家介绍了,所谓的图像在计算机看来就是一个矩阵,对于RGB图像矩阵一共有三层,分别代表着RGB通道,矩阵中每一个数的大小代表着…

团队项目冲刺第三天

团队项目冲刺第三天个人工作总结如下: 1.昨天干了什么? 昨天熟悉了安卓应用开发的具体流程,着重看了用户界面设计部门的安卓开发知识,如某些控件的使用方法等等。 2.今天准备干什么或干了什么? 今天准备开发出了一个简…

PNG转EPS格式

由于使用LaTeX需要将png格式转为eps格式,如果电脑装了tex软件,则转换方式很简单: 首先打开需要转换的图片所在文件夹。在地址栏输入cmd: 此时会弹出,命令窗口,然后输入bmeps -c Figure1.png Figure1.eps 即…

工业根基,莫让ICT喧宾夺主

来源:英诺维盛公司新工业革命正在得到广泛的关注,而ICT则获得了更高的曝光率和话语权。ICT是信息、通信和技术三个英文词首字母组合(Information Communications Technology)。显然,ICT是新工业革命必不可少的“新工业…

github高级搜索

一、明确搜索仓库标题、仓库描述、README 1.只想查找仓库名称包含XX的仓库。语法: in:name 关键词 2.查找描述的内容 in:descripton 关键词 3.查README文件包含特定关键词 in:readme 关键词 二、明确搜索 star、fork 数大于多少的 1. star 数大于 1000 的XX 仓…

python+OpenCV图像处理(三)绘制简单的几何图形、显示文字

绘制简单的几何图形、显示文字 (一)绘制直线和矩形 img np.zeros([512, 512, 3]) # line函数用来画直线,第一个参数可以理解为画布矩阵, # 第二个参数pt1是直线的起始位置,第三个参数pt2是直线的终止位置,…

信息转换原理: 信息、知识、智能的一体化理论

来源:人机与认知实验室【数据、信息、知识、智能除了转换外,是否还有变异、弥聚等?能否把这些变化看成是态、势、感、知结构扭曲而产生的必然现象?】摘要 如何把信息转换为解决问题所需要的智能,是信息科学领域的核心研究课题. 本…

exit(0)和exit(1)区别

exit(0):正常退出程序; exit(1):非正常退出程序; return:返回。 return是语言级别的,表示调用堆栈的返回; exit是系统调用级别的,表示一个进程的退出。 转载于:https://www.cnblogs.…

MATLAB(一)Matlab“帮助”的使用

前言MATLAB是matrix和laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真…

github注册账号一直验证失败

github注册账号第二步是验证,选择图形验证需要将两幅图摆正,我在验证的时候第一幅图可以成功验证,但第二幅图一直失败,明明摆正了却一直说没有摆正,要不就说用时太长(真是有够恶心的)&#xff0…

javascript 学习笔记(一)

说明:从今天开始从基础抓起学习javascript-完全依据w3school(http://www.w3school.com.cn/js/js_intro.asp)网站顺序。这里我将我认为不好理解的地方积累下来,希望对像我一样的新手有益。 第一篇 JavaScript:写入 HTML 输出 1. javascript有…

[附下载]英特尔中国研究院携手生态伙伴发布《机器人4.0白皮书》

来源:硬蛋迈向云-边-端融合的机器人4.0时代在2019国际人工智能与机器人创新生态峰会上,英特尔中国研究院院长宋继强博士发表了题为《迈向云-边-端融合的机器人4.0时代》的主题演讲。宋院长分析了机器人行业的现状与发展趋势,提出了基于AI、5G…

使用哈希表的好处

先来了解一下Hash的基本思路: 设要存储对象的个数为num, 那么我们就用len个内存单元来存储它们(len>num); 以每个对象ki的关键字为自变量,用一个函数h(ki)来映射出ki的内存地址,也就是ki的下标,将ki对象的元素内容全部存入这个…

MATLAB(二)数据的输入

数据的输入 (一)简单矩阵的输入 1.要直接输入矩阵时,矩阵一行中的元素用空格或逗号分隔;矩阵行与行之间用分号“;”隔离,整个矩阵放在“[ ]”里。 >> a [1, 2, 3, 4;5, 6, 7, 8] a 1 2 3 …

linux yum下载RPM包后再安装LAMP环境

1.下载yum插件 yum-downloadonly,实现只下载软件包的功能。 yum install yum-downloadonly 或者 yum install yum-plugin-downloadonly 2.用yum下载Apache,Mysql,PHP. 2.1 下载Apache yum install httpd httpd-devel --downloadonly --downloaddir/home/lamp 2.2 下…

无人驾驶产业的国际比较和PEST分析

来源:智造智库【导读】国家新一代人工智能发展规划中明确提出,发展自动驾驶汽车和轨道交通系统,加强车载感知、自动驾驶、车联网、物联网等技术集成和配套,开发交通智能感知系统,形成我国自主的自动驾驶平台技术体系和…

树回归的介绍

线性回归包含一些强大的方法,但这些方法创建的模型需要拟合所有的样本点(局部加权线性回归除外)。当数据拥有众多特征并且特征之间关系十分复杂时,构建全局模型的想法就显得太难了,也略显笨拙。而且,实际生…

python glob.glob() 函数

用于匹配文件路径,返回所有匹配的文件路径列表。 print (glob.glob(r"D:\*.png") 匹配符包括“*”、“?”和"[]",其中“*”表示匹配任意字符串,“?”匹配任意单个字符,[0-9]与[a-z]表示匹配0-9的单个数字…

[改善Java代码]若有必要,使用变长数组

Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用的时候非常不方便.比如要对一个班级的学生信息进行统计,因为我们不知道班级会有多少个学生(随时可能有退学,入学,转学),所以需要一个足够大的数组来容纳所有的学生.可以通过对数组扩容解决该问题. 代码如下…

人类正在进入超级智能时代,论一种新超级智能的崛起

本文发表在2019年7月30号《社会科学报》,是刘锋根据2019年7月出版的著作《崛起的超级智能:互联网大脑》核心内容撰写的一篇文章,也感谢刘慈欣,张亚勤,周鸿祎,王飞跃,约翰.翰兹等专家和好友推荐。…