python之cv2与图像的载入、显示和保存实例

yipeiwu_com6年前Python基础

本文是OpenCV 2 Computer Vision Application Programming Cookbook读书笔记的第一篇。在笔记中将以Python语言改写每章的代码。

PythonOpenCV的配置这里就不介绍了。

注意,现在OpenCV for Python就是通过NumPy进行绑定的。所以在使用时必须掌握一些NumPy的相关知识!

图像就是一个矩阵,在OpenCV for Python中,图像就是NumPy中的数组!

如果读取图像首先要导入OpenCV包,方法为:

import cv2 

读取并显示图像

在Python中不需要声明变量,所以也就不需要C++中的cv::Mat xxxxx了。只需这样:

img = cv2.imread("D:\cat.jpg") 

OpenCV目前支持读取bmp、jpg、png、tiff等常用格式。更详细的请参考OpenCV的参考文档。

接着创建一个窗口

cv2.namedWindow("Image") 

然后在窗口中显示图像

cv2.imshow("Image", img) 

最后还要添上一句:

cv2.waitKey (0) 

如果不添最后一句,在IDLE中执行窗口直接无响应。在命令行中执行的话,则是一闪而过。

完整的程序为:

import cv2 
 
img = cv2.imread("D:\\cat.jpg") 
cv2.namedWindow("Image") 
cv2.imshow("Image", img) 
cv2.waitKey (0) 
cv2.destroyAllWindows() 

最后释放窗口是个好习惯!

创建/复制图像

新的OpenCV的接口中没有CreateImage接口。即没有cv2.CreateImage这样的函数。如果要创建图像,需要使用numpy的函数(现在使用OpenCV-Python绑定,numpy是必装的)。如下:

emptyImage = np.zeros(img.shape, np.uint8) 

在新的OpenCV-Python绑定中,图像使用NumPy数组的属性来表示图像的尺寸和通道信息。如果输出img.shape,将得到(500, 375, 3),这里是以OpenCV自带的cat.jpg为示例。最后的3表示这是一个RGB图像。

也可以复制原有的图像来获得一副新图像。

emptyImage2 = img.copy(); 

如果不怕麻烦,还可以用cvtColor获得原图像的副本。

emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
#emptyImage3[...]=0 

后面的emptyImage3[...]=0是将其转成空白的黑色图像。

保存图像

保存图像很简单,直接用cv2.imwrite即可。

cv2.imwrite("D:\\cat2.jpg", img)

第一个参数是保存的路径及文件名,第二个是图像矩阵。其中,imwrite()有个可选的第三个参数,如下:

cv2.imwrite("D:\\cat2.jpg", img,[int(cv2.IMWRITE_JPEG_QUALITY), 5])

第三个参数针对特定的格式: 对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int。下面是以不同质量存储的两幅图:

python之cv2与图像的载入、显示和保存

对于PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3:

cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0]) 
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9]) 

保存的图像尺寸如下:

python之cv2与图像的载入、显示和保存

还有一种支持的图像,一般不常用。

完整的代码为:

import cv2 
import numpy as np 
 
img = cv2.imread("./cat.jpg") 
emptyImage = np.zeros(img.shape, np.uint8) 
 
emptyImage2 = img.copy() 
 
emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
#emptyImage3[...]=0 
 
cv2.imshow("EmptyImage", emptyImage) 
cv2.imshow("Image", img) 
cv2.imshow("EmptyImage2", emptyImage2) 
cv2.imshow("EmptyImage3", emptyImage3) 
cv2.imwrite("./cat2.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 5]) 
cv2.imwrite("./cat3.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100]) 
cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0]) 
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9]) 
cv2.waitKey (0) 
cv2.destroyAllWindows() 

以上这篇python之cv2与图像的载入、显示和保存实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

详解Python3注释知识点

Python3 注释 确保对模块, 函数, 方法和行内注释使用正确的风格 Python中的注释有单行注释和多行注释: Python中单行注释以 # 开头,例如:: # 这是一个...

python requests模拟登陆github的实现方法

python requests模拟登陆github的实现方法

1. Cookie 介绍 HTTP 协议是无状态的。因此,若不借助其他手段,远程的服务器就无法知道以前和客户端做了哪些通信。Cookie 就是「其他手段」之一。 Cookie 一个典型的...

python做接口测试的必要性

什么是接口测试 接口测试主要用于检测外部系统与内部系统之间,以及系统内部各 个子系统之间的交互点。其测试的重点是,检查数据的交换、传递和控 制管理过程,以及系统间的逻辑依赖关系等。...

python实现百万答题自动百度搜索答案

python实现百万答题自动百度搜索答案

用python搭建百万答题、自动百度搜索答案。 使用平台 windows7 python3.6 MIX2手机 代码原理 手机屏幕内容同步到pc端 对问题截图 对截图文字分析 用浏览器自...

使用python编写监听端

本文实例为大家分享了python编写监听端的具体代码,供大家参考,具体内容如下 import socket import time import sys import stri...