目录
读取图片和显示图片
显示图片的大小
将图像设置为灰度图
将图片重新写回指定的地址
显示图片的尺寸
获取图片的类型
读取图片和显示图片
在OpenCV使用cv2.imread()来读取图片,例如,在D盘的Photo的文件夹中有一张图片名称为1的jpeg的图片(图片为演示所用,如有侵权可删除):
可以看到这是一张动物图片,下面使用OpenCV对于这张图进行读取:
import cv2
import matplotlib.pyplot as plt
import numpy as np
#import表示导入包
img=cv2.imread(r'D:\Photo\1.jpeg') #读取D盘中Photo中的为1的jpeg图片
在上面imread()函数中在决定路径加一个r,是为了解决转义的问题。
在上面的代码中,读取的是决定地址,如果用户需要读取相对地址可以不需要写所在问的文件夹,例如:
img=cv2.imread(r'test.jpg')
这是读取程序所在文件夹中名叫test的jpg图片。
我们可以直接输出img输出:
img
输出结果为下图内容:
、
那么如何将结果以图像的形式给表示出来呢?下面就以为下面的代码形式来输出结果:
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
注:函数解释——waitKey()
上面函数中,OpenCV中waitKey()函数的作用是等待用户按下键盘上的某个键,然后返回该键的ASCII码。如果用户没有按下任何键,那么函数将一直等待,直到用户按下一个键为止。如果是waitKey(0)的话,表示程序会进入无限循环,直到用户按下任意键为止。
而如果是waitKey(1000)的话,表示用户在10秒之后,如果用户没用按下任意键,那么该窗口会自动消失。其中waitKey()函数里的数值是以毫秒为量级的,waitKey(1000)表示等待10秒,waitKey(10000)表示等待100秒。
输出的结果如下所示:
代码执行之后,会单独弹出一个窗口来加载图片(在写代码的时候需要注意的是之后是在浏览器背后弹出的)
同时也可以单独写一个函数来显示图片的内容,当我们再写一些较大的程序的时候可以直接调用。函数为:
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
显示图片的大小
在OpenCV中,使用img.shape可以获得图片的行数、列数和通道数。
img.shape
运行结果如下所示:
(500, 500, 3)
注:OpenCV中shape属性可以返回一个元组,其中分别是行数、列数和组数,其中如果是一个彩色图像的话,那么会有三个通道(红、绿、蓝),如果是一个灰色图像的话,那么只有一个通道。
将图像设置为灰度图
在OpenCV中将彩色图片转换为灰色图片,只需要在cv2.imread()中第二个参数设置为cv2.IMREAD_GRAYSCALE即可,例如:
import cv2
import matplotlib.pyplot as plt
import numpy as np
img=cv2.imread(r'D:\Photo\1.jpeg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('image_gray',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#本程序是读取Photo中图片1,并且将图片由彩色转换为灰色
运行结果如下所示:
另外一种将彩色图片转换为 灰色图片的方式还有将cv2.imread()第二个参数设置为0,运行结果相同,即:
img=cv2.imread(r'D:\Photo\1.jpeg',cv2.IMREAD_GRAYSCALE)
将图片重新写回指定的地址
在OpenCV中使用cv2.imwrite()将图片重新写回指定地址中,例如将上面的所得到的灰色重新写回文件夹:
cv2.imwrite(r'D:\Photo\2.png',img)
同读取图片相同,当要写入图片到绝对位置的时候,同样需要对决定位置前加上r。当执行后,运行结果在Notebook上显示为:True。再到文件夹中可以看到:
可以看到灰色图片成功写入文件夹中。
显示图片的尺寸
在OpenCV中通常用size属性来表示图像的尺寸,例如将上述的图片查看图片的尺寸:
import cv2
import matplotlib.pyplot as plt
import numpy as np
img1=cv2.imread(r'D:\Photo\1.jpeg')
img2=cv2.imread(r'D:\Photo\1.jpeg',cv2.IMREAD_GRAYSCALE)
img3=cv2.imread(r'D:\Photo\2.png')
print(img1.size)
print(img2.size)
print(img3.size)
#注在实际的文件夹中,1.jpeg是彩色图片,而2.png是黑白图片
运行结果如下所示:
750000
250000
750000
通过上面的运行结果可以看到,由于该图片的行数和列数均为500,得到750000的原因显然是500*500*3=750000,得到250000显然是500*500*1=250000。因此在读取图片时若没有将图片转换为灰色图片(即设置cv2.IMREAD_GRAYSCALE),那么尺寸大小为行数*列数*3(即使图片本身是灰色图片没有设置通道数也为3);若读取图片将图片转换为灰色图片,则通道数为1。
获取图片的类型
在OpenCV中,通过type函数可以获取图片的类型,例如获取上述代码中img的类型:
type(img)
返回的结果为numpy.ndarray,而numpy.ndarray表示的是一个多维数字,在OpenCV中图像多用numpy.ndarray来表示,便于对图像进行操作。