Python下的OpenCv学习(一)图像的读取、复制、显示、保存

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

(1)认识和读取图像

图像其实是一个数组,对图像的处理就是对数字的处理

#导入opencv和numpy
import cv2
import numpy as np

读取图像

这里是我用的图片


1.jpg

img = cv2.imread("1.jpg", cv2.IMREAD_COLOR)

“1.jpg”是要读入图像的完整路径 ,这里我把图像文件和.py文件放在同一个路径下,所以只写了文件名**(注意:图像的完整路径不要有中文,如果出现中文的话会报错,请一定要注意这一点)**

#opencv支持以下3种
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
cv2.IMREAD_GRAYSCALE:读入灰度图片
cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道

这里就算不用参数也可以一样读取

img = cv2.imread("1.jpg") 

对图像进行处理和显示

print(img)
print(np.shape(img))

输出结果为

[[[205 204 154]
   [205 204 154]
   [205 204 154]
   …
   [205 204 154]
   [205 204 154]
   [205 204 154]]
 [[205 204 154]
   [205 204 154]
   [205 204 154]
   …
   [205 204 154]
   [205 204 154]
   [205 204 154]]
 [[205 204 154]
   [205 204 154]
   [205 204 154]
   …
   [205 204 154]
   [205 204 154]
   [205 204 154]]
 …
 [[190 174  78]
   [190 174  78]
   [190 174  78]
   …
   [190 174  78]
   [190 174  78]
   [190 174  78]]
 [[190 174  78]
   [190 174  78]
   [190 174  78]
   …
   [190 174  78]
   [190 174  78]
   [190 174  78]]
 [[190 174  78]
   [190 174  78]
   [190 174  78]
   …
   [190 174  78]
   [190 174  78]
   [190 174  78]]]
 (375, 500, 3)

(二)显示图像

#读取图片
img = cv2.imread('1.jpg')
#先创建一个窗口
cv2.namedWindow('image')
#在窗口中显示图像
cv2.imshow('image', img)
#使窗口始终保持住
cv2.waitKey(0)

‘image’:是显示图像的窗口的名字
img:是要显示的图像(imread读入的图像),窗口大小自动调整为图片大小 。

cv2.waitKey就是等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。若没有按下任何键,超时后返回-1。参数为0表示无限等待。
有一句话很关键”若在等待时间内按下任意键则返回按键的ASCII码”

你可以用此功能做一个简单的按键检测。

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

上文提到了三种参数,这里还可以有两种

模式参数:

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

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

#读入为灰度图像
img = cv2.imread('rose1.jpg', 0)

最后释放窗口

cv2.destroyAllWindows()

(三)复制图像

img1 = img.copy()

(四)保存图像

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

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

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

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

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

cv2.imwrite("1_test.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 0])
cv2.imwrite("2_test.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 9])

还有其他的一些相关操作,可以在网上查阅到