图像处理最基本的操作,包括读取图像、显示图像、保存图像、获取图像属性等。下面将依次讲解这4个内容。
1 读取图像
OpenCV提供了用于读取图像的imread()方法,其语法格式如下:
image = cv2.imread(filename, flags)
参数说明:
l image:是imread()方法的返回值,返回的是读取到的图像。
l filename:要读取的图像的完整文件名。例如,要读取当前项目目录下的1.1.jpg,filename的值为"1.1.jpg"(双引号是英文格式的)。
l flags:读取图像颜色类型的标记。当flags的默认值为1时,表示读取的是彩色图像,此时的flags值可以省略;当flags的值为0时,表示读取的是灰度图像(如果读取的是彩色图像,也将转换为与彩色图像对应的灰度图像)
实例1 读取当前项目目录下的图像
在PyCharm中的PythonDevelop项目下,有一幅名为1.1.jpg的图像,如图22所示。在ImageTest.py文件中,先使用imread()方法读取1.1.jpg,再使用print()方法打印1.1.jpg。代码如下:
import cv2 # 读取1.1.jpg,等价于image = cv2.imread("1.1.jpg",1) image = cv2.imread("1.1.jpg") print(image) # 打印1.1.jpg
上述代码打印的部分结果如图22所示。
图22 PythonDevelop项目下的1.1.jpg
图23 打印1.1.jpg
说明:图23输出的数字是1.1.jpg的部分像素值。有关像素和像素值的内容,将在本书的第2章进行讲解。
如果1.1.jpg在D盘的根目录下,应该如何使用imread()方法进行读取呢?只需将实例1第4行代码:
image = cv2.imread("1.1.jpg")
修改为如下代码:
image = cv2.imread("D:/1.1.jpg") # 路径中不能出现中文
注意:"D:/1.1.jpg"等价于"D:\\1.1.jpg"。
2 显示图像
相比图23中密密麻麻的数字,将图像显示出来,效果会更加直观。为此,OpenCV提供了imshow()方法、waitKey()方法和destroyAllWindows()方法。
(1)imshow()方法用于显示图像,其语法格式如下:
cv2.imshow(winname, mat)
参数说明:
l winname:显示图像的窗口名称。
l mat:要显示的图像。
(2)waitKey()方法用于等待用户按下键盘上按键的时间。当用户按下键盘上的任意按键时,将执行waitKey()方法,并且获取waitKey()方法的返回值。其语法格式如下:
retval = cv2.waitKey(delay)
参数说明:
l retval:与被按下的按键相对应的ASCII码。例如,Esc键的ASCII码是27,当用户按下【Esc】键时,waitKey()方法的返回值是27。如果没有按键被按下,waitKey()方法的返回值是-1。
l delay:等待用户按下键盘上按键的时间,单位为毫秒(ms)。当delay的值为负数、0或者为空时,表示无限等待用户按下键盘上按键的时间。
(3)destroyAllWindows()方法用于销毁所有正在显示图像的窗口,其语法格式如下:
cv2.destroyAllWindows()
实例2 显示图像
编写一个程序,使用imread()方法、imshow()方法、waitKey()方法和destroyAllWindows()方法,读取并显示PythonDevelop项目下的1.1.jpg。代码如下:
import cv2 image = cv2.imread("1.1.jpg") # 读取1.1.jpg cv2.imshow("flower", image) # 在名为flower的窗口中显示1.1.jpg cv2.waitKey() # 按下任何键盘按键后 cv2.destroyAllWindows() # 销毁所有窗口
上述代码的运行结果如图24所示。
图24 显示1.1.jpg
注意:(1)显示图像的窗口名称不能是中文(例如,把实例2第5行代码中的"flower"修改为"鲜花"),否则会出现如图25所示的乱码。
(2)为了能够正常显示图像,要在cv2.imshow()之后紧跟着cv2.waitKey()。
图25 窗口名称是中文时出现乱码
依据imread()方法的语法,如果把实例2第4行代码:
image = cv2.imread("1.1.jpg")
修改为如下代码:
image = cv2.imread("1.1.jpg", 0)
即可得到由1.1.jpg转换得到的灰度图像,如图26所示。
图26 由1.1.jpg转换得到的灰度图像
如果想设置窗口显示图像的时间为5s,又该如何编写代码呢?只需将实例2第6行代码:
cv2.waitKey()
修改为如下代码:
cv2.waitKey(5000) # 1000ms为1s,5000ms为5s
3 保存图像
OpenCV提供了用于按照指定路径保存图像的imwrite()方法,其语法格式如下:
cv2.imwrite(filename, img)
参数说明:
l filename:保存图像时所用的完整路径。
l img:要保存的图像
实例3 保存图像
编写一个程序,把PythonDevelop项目下的1.1.jpg保存为E盘根目录下的、Pictures文件夹中的1.jpg。代码如下:
import cv2 image = cv2.imread("1.1.jpg") # 读取1.1.jpg # 把1.1.jpg保存为E盘根目录下的、Pictures文件夹中的1.jpg cv2.imwrite("E:/Pictures/1.jpg", image)
运行上述代码前,要确认E盘根目录下是否有Pictures文件夹。如果没有,要在E盘根目录下新建一个空的Pictures文件夹。运行上述代码后,打开E盘根目录下的Pictures文件夹,即可看到1.jpg,如图27所示。
图27 E盘根目录下的、Pictures文件夹中的1.jpg
4 获取图像属性
处理图像的过程中,经常需要获取图像的大小、类型等图像属性。为此,OpenCV提供了shape、size和dtype这3个常用属性。这3个常用属性的具体含义分别如下:
l shape:如果是彩色图像,那么获取的是一个包含图像的水平像素、垂直像素、通道数的数组,即(垂直像素、水平像素、通道数);如果是灰度图像,那么获取的是一个包含图像的水平像素、垂直像素的数组,即(垂直像素,水平像素)。
说明:垂直像素指的是垂直方向上的像素,水平像素指的是水平方向上的像素。有关像素、灰度图像和通道的内容,将在本书的第2章进行讲解。
l size:获取的是图像包含的像素个数,其值为“水平像素 × 垂直像素 × 通道数”。(灰度图像的通道数为1)
l dtype:获取的是图像的数据类型。
实例4 分别获取彩色图像和灰度图像的属性
编写一个程序,先获取PythonDevelop项目下的1.1.jpg的属性,再获取由1.1.jpg转换得到的灰度图像的属性。代码如下:
import cv2 image_Color = cv2.imread("1.1.jpg") # 读取1.1.jpg print("获取彩色图像的属性:") print("shape =", image_Color.shape) # 打印彩色图像的(垂直像素,水平像素,通道数) print("size =", image_Color.size) # 打印彩色图像包含的像素个数 print("dtype =", image_Color.dtype) # 打印彩色图像的数据类型 image_Gray = cv2.imread("1.1.jpg", 0) # 读取与1.1.jpg(彩色图像)对应的灰度图像 print("获取灰度图像的属性:") print("shape =", image_Gray.shape) # 打印灰度图像的(垂直像素,水平像素) print("size =", image_Gray.size) # 打印灰度图像包含的像素个数 print("dtype =", image_Gray.dtype) # 打印灰度图像的数据类型
上述代码的运行结果如图28所示。
图28 获取并打印彩色图像的属性
说明:图28代码中“(292, 219, 3)”的含义是1.1.jpg的垂直像素是292,水平像素是219,通道数是3;“(292, 219)”的含义是由1.1.jpg转换得到的灰度图像的垂直像素是292,水平像素是219,通道数是1。
标签:1.1,image,cv2,jpg,像素,图像处理,图像,基本操作 From: https://www.cnblogs.com/flyingsir/p/17904213.html