【OpenCV-Python】图像的载入、显示和输出(imread()、imshow()、waitKey()、namedWindow()、imwrite())

图像的载入:imread()函数

imread()函数可以用来非常便捷地读取文件中的图片到Opencv中。这个函数一般需要两个参数:

(1)载入图片的路径名。如果图像文件在工程文件夹下,可以直接用文件名读取,如“cat.jpg”,否则需要输入完整的访问路径,如“D:\\test\\lena.png”。这里还有几个tips:

  • imread函数中,一个点代表省略当前文件夹路径,两个点则代表回到上一个文件夹路径。

  • 通常可以通过以下方式获得图片的路径:在图片上右键——属性——安全——对象名称,如下图所示。但是需要注意,OpenCV的imread()不支持单右斜线形式的路径。但是,可以支持其他斜线形式都,比如双右斜线、双左斜线、单左斜线或前述三种斜线组成的混合型形式!!

(2)int 类型的 flags,即载入标记,用于指定加载图像的颜色类型,其默认值为1,表示载入三通道的彩色图像。常用的标识符解释如下:

  • cv.IMREAD_UNCHANGED,等价取值为-1,载入无损的原图像,包括alpha通道;
  • cv.IMREAD_GRAYSCALE,等价取值为0,以灰度模式加载图像;
  • cv.IMREAS_COLOR,默认标志,等价取值为1,加载彩色图像。图像的透明度都将被忽略。

图像的显示:imshow()函数

使用函数cv.imshow() 在窗口中显示图像,该函数同样需要两个参数:

(1)winname,窗口标识名称。

(2)填所需要显示的图像。

在我们直接使用 cv.imshow() 函数时,创建出来的窗口往往是“一瞬即逝”的。我们需要用 cv.waitKey() 来“维持”窗口。cv.waitKey() 具有键盘绑定功能,它的参数是时间(以毫秒为单位)。该函数将为任何键盘事件等待指定的毫秒数。如果在此期间按任意键,程序将继续。如果传递 0,它将无限期地等待击键。我们还可以将其设置为检测特定的按键,例如是否按下了按键q或Esc(ASCII码为27)。最后,还需要通过cv.destroyAllWindows()cv.destroyWindow() 销毁创建出的窗口,释放出相应的内存空间。cv.destoryAllWindows()会销毁创建的所有窗口,如果要销毁指定的窗口,可以使用cv.destroyWindow()函数,在其中传递确切的窗口名称作为参数。

#代码示例
import cv2 as cv

img = cv.imread('cat.jpg',cv.IMREAD_GRAYSCALE)
cv.imshow('image',img)

#以下三种方式为并列关系,仅为解释cv.waitKey()函数用法
#无限等待等待任意键盘输入
cv.waitKey(0)
cv.destroyAllWindows()

#窗口显示1s(1s=1000ms)后关闭
cv.waitKey(1000)
cv.destroyAllWindows()

#等待按q键则返回
if cv2.waitKey(0) & 0xFF == ord('q'):
    cv.destroyAllWindows()

我们也可以在加载图像之前,指定创建出的窗口性质。在这种情况下,我们会用到cv.namedWindow()函数。该函数除了需要传入窗口名称之外,还需要一个窗口标识,有如下几种选择:

  • cv.WINDOW_NORMAL,在此设置下,用户可以任意改变窗口大小;
  • cv.WINDOW_AUTOSIZE,在此设置下,窗口大小会自动调整以适应显示的图像,用户不能手动改变窗口大小;
  • cv.WINDOW_OPENGL,在此设置下,窗口创建时可以支持OpenGL。

namedWindow()函数的第二个参数有默认值WINDOW_AUTOSIZE。


输出图像文件:imwrite()函数

OpenCV中,输出图像到文件一般采用 imwrite() 函数,该函数需要三个参数:

(1)带后缀的文件名,如“123.jpg”。

(2)需要输出的图像名称。

(3)用于改变图片质量的特定格式保存的参数编码,一般情况下不需要填写。


综合练习

import cv2 as cv

#使用函数cv.imread()读取图像。
image = cv.imread('lena.jpg',cv.IMREAD_GRAYSCALE)

#使用函数cv.imshow()在窗口中显示图像。
image_1 = cv.imread('lena.jpg')
cv.namedWindow('lena', cv.WINDOW_NORMAL)  # cv.WINDOW_NORMAL可调整图片显示大小
cv.imshow("lena", image_1)

k = cv.waitKey(0)

#Esc键退出
if k == 27: 
    cv.destroyAllWindows()

#s键保存
elif k == ord("s"): 
    cv.imwrite("lena_new.jpg",image_1)
    cv.destroyAllWindows()

 

参考:

https://docs.opencv.org/4.1.1/dc/d2e/tutorial_py_image_display.html

《OpenCV3编程入门》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章