欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Opencv的python接口简单读取并显示图片

程序员文章站 2022-03-20 14:52:51
...

读取图片并显示

#-*-coding:utf-8-*-
import cv2
img_path = "./cat.59.jpg"
img = cv2.imread(img_path)

cv2.namedWindow("Cat")
cv2.imshow("Cat",img) # 只使用imshow的时候,在IDLE窗口不会显示出图片。需要其后面接cv2.waitKey()配合使用。
aa = cv2.waitKey(1000) # 显示1s,然后关闭显示。
print aa ## 按下q,返回值113(q对应的ASCII码)
cv2.destroyAllWindows()  ## 关闭之前打开的窗口

opencv读取的图片格式为numpy.ndarray,shape为( H x W x C)。像素值取值范围为[0,255]

上面程序用到了几个函数,不了解的话可以查看API手册,函数说明如下:

int cv::waitKey( int delay=0)

delay0时,函数会卡在这里,直到一个按键按下。且函数返回按键对应的ascii字符值,且关闭之前打开的图片显示窗口。
当delay>0时,函数会在delay值对应的ms时间内接收一个按键值,然后返回按键对应的ascii字符值,若这段时间内无按键按下,则返回-1值。

void cv::namedWindow( const String & winname,int flags = WINDOW_AUTOSIZE )

namedWindow为图片创建一个占位符(placeholder),用来显示图像。默认显示原始大小的图像。
你可以调用cv2.destroyWindow()或cv2.destroyAllWindows()来关闭窗口并取消任何关联的内存使用。 对于一个简单的程序,您并不需要调用这些函数,因为应用程序的所有资源和窗口在退出时都会被操作系统自动关闭。

void cv::imshow( const String & winname,InputArray mat )

在给定的窗口下显示图片。winname为窗口对应的字符串。默认显示原始大小的图像。
关于imshow的注意:
**只使用imshow的时候,在IDLE窗口不会显示出图片。需要其后面接cv2.waitKey()配合使用。**

此外,在ipython下,运行上面的程序会出问题,而将上面的代码保存为py文件,在python xx.py运行则没问题。

另外,还可以利用waitKey()函数来识别按键,实现一个功能:当检测到某个指定的按键按下的时候,关闭显示,比如说这个按键为’q’。

#-*-coding:utf-8-*-
import cv2

img_path = "./cat.59.jpg"
img = cv2.imread(img_path)

cv2.namedWindow("Cat")

while True:
    cv2.imshow("Cat",img) 
    if cv2.waitKey(1) & 0xFF == ord('q'):
        print("Done!")
        break
cv2.destroyAllWindows()
  1. 其中,cv2.waitKey(1) & 0xFF的作用是取返回值的最后一个字节。
  2. ord(‘q’)为字符q对应的整数值。