python实现cv2图片读取显示及图片不显示或显示不全的问题分析
python图片操作之opencv
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。本文主要涉及python语言的opencv编程。
图片读入
在很多应用中需要处理的数据以图片的形式存在,python语言能够通过cv2来读取图片,并将其存储为array。
import cv2
im=cv2.imread('图片存储路径',读入方式)
读入的图片可放置在当前程序的工作路径,也可以提供图片的绝对路径。
读入方式则决定了如何读取这幅图片。
- cv2.IMREAD_COLOR(默认方式),读入一副彩色图像,忽略alpha通道(反应了图像的透明度);
- cv2.IMREAD_GRAYSCALE,以灰度图读入;
- cv2.IMREAD_UNCHANGED,读入完整图片,包括透明度;
图片显示
可以通过函数cv2.imshow()将程序中存储的图像数据以图片的形式绘制在屏幕窗口中。
cv2.imshow('窗口名称',图片数据)
图片不能显示的问题
在应用中或许会碰到图片一闪而过从而导致图片不显示。解决该问题,我们需要在cv2.imshow()后面设置图像持续时间。
import cv2
im=cv2.imread('./pic.jpg')
cv2.imshow('img',im)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中,cv2.waitkey(0)表示持续显示图片直到按键按下,我们也可以设置一个具体的时间,例如cv2.waitkey(10)令图片显示10ms后关闭。cv2.destroyAllWindows()则用来设置关闭窗口是所执行的动作。
图片只显示一小部分
在实际应用中读入图像尺寸不一,当图像尺寸远大于屏幕可显示大小时,通过上述代码,我们会发现显示的图片仅为原始图片的一部分。这是由于上述代码默认的窗口属性为cv2.WINDOW_AUTOSIZE(按照图片大小自动调整窗口大小),则当图片尺寸小于屏幕大小时,按图片尺寸设置窗口大小,显示一个完整的图片。当图片尺寸大于屏幕大小时,窗口依旧按照图片尺寸设置,则我们的屏幕不能显示整个窗口,从而产生图片显示不全的问题。
这时,我们可以通过设置窗口属性,保证图片显示完整。
import cv2
im=cv2.imread('./pic.jpg')
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.imshow('img',im)
cv2.waitKey(0)
cv2.destroyAllWindows()
通过cv2.namedWindow(‘img’,cv2.WINDOW_NORMAL)设置窗口属性为可以任意调整窗口大小,则能够在屏幕上显示完整的图像,但要注意拖动窗口时造成的图像比例失真。
通过上述分析,图片显示不全的主要原因是图片过大。因此,我们也可以通过主动调整图片大小,使其符合屏幕大小从而解决该问题。
import cv2
im=cv2.imread('./pic.jpg')
im=cv2.resize(im,(1366,768))#小于或等于屏幕分辨率
cv2.imshow('img',im)
cv2.waitKey(0)
cv2.destroyAllWindows()
声明
由于个人知识局限,所写的内容会存在错误,欢迎大家指出其中的问题,谢谢