图像入门
目标
- 在这里,您将学习如何阅读图像,如何显示图像以及如何保存图像
- 你将学习这些函数:cv2.imread(),cv2.imshow(),cv2.imwrite()
- 或者,您将学习如何使用Matplotlib显示图像
使用OpenCV
阅读一张图片
使用函数cv2.imread()来读取图像。图像应该在工作目录中,或者应该给出图像的完整路径。
第二个参数是一个标志,用于指定应读取图像的方式。
- cv2.IMREAD_COLOR:加载彩色图像。图像的任何透明度都将被忽略。这是默认标志。
- cv2.IMREAD_GRAYSCALE:以灰度模式加载图像
- cv2.IMREAD_UNCHANGED:加载包含Alpha通道的图像
注意
而不是这三个标志,你可以简单地传递整数1,0或-1。
请参阅下面的代码:
import numpy as np import cv2 #以灰度图 格式加载彩色图像img = cv2 。imread ('messi5.jpg' ,0 )
警告
即使图像路径错误,它也不会抛出任何错误,但会给你print img
None
显示图像
使用函数cv2.imshow()在窗口中显示图像。该窗口自动适合图像大小。
第一个参数是一个窗口名称,它是一个字符串。第二个论据是我们的形象。您可以根据需要创建多个窗口,但使用不同的窗口名称。
cv2 。imshow ('image' ,img ) cv2 。waitKey (0 ) cv2 。destroyAllWindows ()
该窗口的屏幕截图如下所示(在Fedora-Gnome机器中):
cv2.waitKey()是一个键盘绑定函数。它的论点是以毫秒为单位的时间。该函数等待指定的毫秒为任何键盘事件。如果在那段时间按任意键,程序会继续。如果传递0,它将无限期地等待键击。它也可以设置为检测特定的按键笔画,例如,如果按键a被按下等,我们将在下面讨论。
cv2.destroyAllWindows()只是销毁我们创建的所有窗口。如果你想销毁任何特定的窗口,使用函数cv2.destroyWindow()作为参数传递确切的窗口名称。
注意
有一种特殊情况,您可以在后面创建窗口并加载图像。在这种情况下,您可以指定窗口是否可调整大小。它使用函数cv2.namedWindow()完成。默认情况下,该标志是cv2.WINDOW_AUTOSIZE
。但是,如果您指定标志cv2.WINDOW_NORMAL
,您可以调整窗口大小。当图像尺寸过大并将轨迹条添加到窗口时,这会很有帮助。
请参阅下面的代码:
cv2 。namedWindow ('图像' , CV2 。WINDOW_NORMAL ) CV2 。imshow ('image' ,img ) cv2 。waitKey (0 ) cv2 。destroyAllWindows ()
写一张图片
使用函数cv2.imwrite()保存图像。
第一个参数是文件名,第二个参数是要保存的图像。
cv2 。imwrite ('messigray.png' ,img )
这会将图像以PNG格式保存在工作目录中。
总结一下
在程序下方加载灰度图像,显示图像,按's'保存图像并退出,或者按ESC键退出而不保存。
import numpy as np import cv2 img = cv2 。imread ('messi5.jpg' ,0 ) cv2 。imshow ('image' ,img ) k = cv2 。waitKey (0 ) 如果 k == 27 : #等待ESC键退出 cv2 。destroyAllWindows () elif k == ord ('s' ): #等待's'键保存并退出 cv2 。imwrite ('messigray.png' ,img ) cv2 。destroyAllWindows ()
警告
如果您使用的是64位机器,则必须按如下方式修改行:k = cv2.waitKey(0)
k = cv2.waitKey(0) & 0xFF
使用Matplotlib
Matplotlib是Python的绘图库,它为您提供了各种各样的绘图方法。你会在即将发表的文章中看到它们。在这里,您将学习如何使用Matplotlib显示图像。你可以放大图像,使用Matplotlib保存等。
导入 numpy的 为 NP 进口 CV2 从 matplotlib 进口 pyplot 如 PLT img = cv2 。imread ('messi5.jpg' ,0 ) plt 。imshow (img , cmap = 'gray' , interpolation = 'bicubic' ) plt 。xticks ([]), plt 。yticks ([]) #隐藏X轴和Y轴上的刻度值 plt 。show ()
窗口的屏幕截图如下所示:
也可以看看
Matplotlib提供了大量的绘图选项。有关更多详细信息,请参阅Matplotlib文档。有些,我们会在途中看到。
警告
OpenCV加载的彩色图像处于BGR模式。但Matplotlib以RGB模式显示。因此,如果使用OpenCV读取图像,则彩色图像将无法在Matplotlib中正确显示。请参阅练习以获取更多详细信息。
其他资源
演习
- 尝试在OpenCV中加载彩色图像并将其显示在Matplotlib中时出现问题。阅读这个讨论并理解它。