目录
cv2.waitKey()
窗口创建:cv2.namedWindow()
窗口大小调整:cv2.resizeWindow()
窗口显示:cv2.imshow()
关闭窗口:cv2.destroyAllWindows()
图片读取:cv2.imread()
图片保存:cv2.imwrite()
代码示例
int waitKey(int delay=0)
waitKey()的基本逻辑:他会在一定时间内等待接收键盘的一个值;返回值为键盘按键的ASCII值;delay表示等待时间(ms)。
若delay<=0,则表示程序会无限制的等待用户的按键事件。
若等待期间没有按键输入,则返回 -1 。
常见:cv2.waitKey(1000) & 0xFF == ord(‘q’)
解释:ord('q')
:返回q的ascii码,waitKey返回值的范围为(0-255),通过 cv2.waitKey(1) & 0xFF
可以将值限定在(0-255)避免程序出现奇怪的BUG。
常用案例:
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
exit()
void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE)
winname:窗口名字;flags:窗口标识,默认为WINDOW_AUTOSIZE。
flags |
作用 |
WINDOW_NORMAL | 显示图像后,允许用户随意调整窗口大小 |
WINDOW_AUTOSIZE | 根据图像大小显示窗口,不允许用户调整大小 |
WINDOW_FREERATIO | 窗口大小自适应比例 |
WINDOW_KEEPRATIO | 保持图像的比例 |
用法:cv2.resizeWindow(window_name, width, height)
不返回任何值;
cv2.imshow(winname, img)
winname:一个字符串,代表要在其中显示图像的窗口的名称。
img:它是要显示的图像。
它不返回任何值。显示时会将像数值范围映射至 [0,255] 。
You can call destroyWindow() or destroyAllWindows() to close the window and de-allocate any associated memory usage. For a simple program, you do not really have to call these functions because all the resources and windows of the application are closed automatically by the operating system upon exit.
您可以调用destroyWindow()或destroyAllWindows()来关闭窗口并取消分配任何相关的内存使用。对于一个简单的程序,实际上不必调用这些函数,因为退出时操作系统会自动关闭应用程序的所有资源和窗口
void destroyWindow(const string& winname);
winname:需要关闭的窗口的名称
imread(const string& filename, int flags = IMREAD_COLOR)
返回值:mat格式,返回读取的图片。
参数1 filename:读取的图片文件名,可以使用相对路径或者绝对路径,但必须带完整的文件扩展名(图片格式后缀)。
参数2 flags:一个读取标记,用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什么颜色格式读取图片有关。
flags | 说明 |
---|---|
IMREAD_UNCHANGED | 如果设置,则按原样返回加载的图像(使用Alpha通道,否则会被裁剪) |
IMREAD_GRAYSCALE | 如果设置,则始终将图像转换为单通道灰度图像(编解码器内部转换)。 |
IMREAD_COLOR | 如果设置,请始终将图像转换为3通道BGR彩色图像。 |
IMREAD_ANYDEPTH | 如果设置,则在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位。 |
IMREAD_ANYCOLOR | 如果设置,则以任何可能的颜色格式读取图像。 |
IMREAD_LOAD_GDAL | 如果设置,使用gdal驱动程序加载图像 |
IMREAD_REDUCED_GRAYSCALE_2 | 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/2。 |
IMREAD_REDUCED_COLOR_2 | 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/2。 |
IMREAD_REDUCED_GRAYSCALE_4 | 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/4 |
IMREAD_REDUCED_COLOR_4 | 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/4 |
IMREAD_REDUCED_GRAYSCALE_8 | 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/8。 |
IMREAD_REDUCED_COLOR_8 | 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/8。 |
IMRED_IGNORE_ORIENTATION | 如果设置,请不要根据EXIF的方向标志旋转图像。 |
cv2.imwrite(filename,img,params)
filename:图片保存的地址,包括图片文件名及后缀。
img:要保存的图像数组。
imwrite函数是基于文件扩展名选择图像的格式。通常,使用此功能只能保存8位单通道或3通道(带有BGR通道顺序)图像,但有以下例外:
▶对于PNG,JPEG2000和TIFF格式,可以保存16位无符号(CV_16U)图像。
▶32位浮点(CV_32F)图像可以保存为PFM,TIFF,OpenEXR和Radiance HDR格式; 使用LogLuv高动态范围编码(每像素4个字节)保存3通道(CV_32FC3)TIFF图像。
▶可以使用此功能保存带有Alpha通道的PNG图像。为此,创建8位(或16位)4通道图像BGRA,其中alpha通道最后。完全透明的像素应该将alpha设置为0,完全不透明的像素应该将alpha设置为255/65535。如果格式,深度或通道顺序不同,请在保存之前使用Mat :: convertTo和cv :: cvtColor进行转换。或者,使用通用FileStorage I / O函数将图像保存为XML或YAML格式。
params:以特定格式保存图片。
cv2.CV_IMWRITE_JPEG_QUALITY:设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95),数值越大则图片质量越高;
cv2.CV_IMWRITE_WEBP_QUALITY:设置 .webp 格式的图片质量,取值为 0-100;
cv2.CV_IMWRITE_PNG_COMPRESSION:设置 .png 格式图片的压缩比,取值为 0-9(默认值 3),数值越大则压缩比越大。
返回值:保存成功返回 True,否则返回 False。
import cv2
# 读取图片 211*400
img = cv2.imread('D:\Tom.jpg', flags = cv2.IMREAD_COLOR)
# 创建窗口,命名为Demo
cv2.namedWindow('Demo', cv2.WINDOW_NORMAL)
# 调整窗口大小w
cv2.resizeWindow('Demo', 422, 800)
while 1:
# 在窗口内显示图片
cv2.imshow('Demo', img)
# 等待按键结束窗口
key = cv2.waitKey(0)
# 按 q 退出程序
if key & 0xFF == ord('q'):
break
# 按 s 保存图片
elif key & 0xFF == ord('s'):
cv2.imwrite('D:\Demo.jpg', img)
#关闭所有窗口,释放资源
cv2.destroyAllWindows()
参考:
cv2.waitKey()_长 青的博客-CSDN博客
cv2.waitKey的入门级理解_山上有强强的博客-CSDN博客
python cv2.waitKey()函数_漫天丶飞雪的博客-CSDN博客
3-2 如何通过OpenCV创建显示窗口_哔哩哔哩_bilibili
opencv中namedWindow( )函数用法总结(02)tu_洛克家族的博客-CSDN博客
OpenCV中namedWindow()函数使用_opencv銝要amedwindow_郑德帅的博客-CSDN博客
【OpenCV 例程300篇】03. 图像的显示(cv2.imshow)_youcans_的博客-CSDN博客
OpenCV中的destroyallWindows的作用_hanjie-chen的博客-CSDN博客
Python OpenCV resizeWindow()用法及代码示例 - 纯净天空
https://www.cnblogs.com/mangoroom/archive/2019/06/10/10999151.html
cv.imread()函数_幼稚园的扛把子~的博客-CSDN博客
【OpenCV 例程300篇】02. 图像的保存(cv2.imwrite)_youcans_的博客-CSDN博客
python-opencv第二期:imwrite函数详解_cv2.imwrite_Kamen Black君的博客-CSDN博客