前 言
从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])
其实,还有很多有趣的操作,就不介绍了,需要用的时候在进行学习,知道这两个比较常用的。