cv2相关知识初步学习

  • python图片操作之opencv
  • 图片读入
  • 图片显示
  • 图片不能显示的问题
  • 图片只显示一小部分
  • 声明


python图片操作之opencv

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。本文主要涉及python语言的opencv编程。

图片读入

在很多应用中需要处理的数据以图片的形式存在,python语言能够通过cv2来读取图片,并将其存储为array。

import cv2
im=cv2.imread('图片存储路径',读入方式)

读入的图片可放置在当前程序的工作路径,也可以提供图片的绝对路径。
读入方式则决定了如何读取这幅图片。

  1. cv2.IMREAD_COLOR(默认方式),读入一副彩色图像,忽略alpha通道(反应了图像的透明度);
  2. cv2.IMREAD_GRAYSCALE,以灰度图读入;
  3. 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()

声明

由于个人知识局限,所写的内容会存在错误,欢迎大家指出其中的问题,谢谢