Opencv是于1999年由Intel建立,如今由Willow Garage提供支持。实现了图像处理和计算机视觉方面的很多通用算法,可以说是计算机视觉入门的必要了解的基础,并且包括许多编程语言例如:C++、Python、Ruby、MATLAB等的接口。
若学过C++中的opencv,再学习其在python中的应用的话可能会很容易理解,不过,由于最近用python比较多,所以就想着把Opencv在python中的用法给学一下,同时,我觉得实践是掌握知识的最好路径,并且多做总结,在实际的编程运行结果中得到快速的结果反馈比自己盯着书本看效果要好的多。
1.Opencv3+Python3.7环境搭建:
相对来说比较简单,用过python的话只需几步就可安装opencv。网上的教程也比较多。
我的环境:
1.Anaconda(python的一个包管理以及环境管理的软件)+numpy
2.三种方法安装:
①安装完Anaconda 之后只需打开Anaconda Navigator,启动环境,查找opencv,然后apply安装。(推荐)
②打开命令行输入:conda install opencv 即可
③打开命令行输入:pip install opencv 即可
2.检验Python版本的Opencv是否安装成功:
import cv2 as cv
print(cv.__version__)#输出opencv的版本号
#'3.4.1'
2.图像读取与保存
首先对图像的基础知识进行总结:
由于在python中opencv存储图像是以N维数组,而在C++中是Mat类型。因此需要安装Numpy(同样:conda install numpy),这样对图像的各种操作时非常方便!!!
图像:即多维数组,RGB图像彩色图像为三维数组,(这里对图像的三个通道的理解我看过一些博客之后觉得这样最容易理解:图像的通道只有在显示设备上才有意义,在计算机中存储的时候所有的通道都是灰度数值,在需要显示彩色图像时,以RGB为例,将不同的通道数据给放进不同的通道里)
图像位深:即存储表达一个像素点所需要的位,如256灰度级2的8次方,即8位图像。
图像属性,图像通道,图像高宽查看:
import cv2 as cv
import numpy as np
#1,opencv图像读取显示详细信息操作
def zh_Ch(str):
#防止编码解码过程中文乱码
return str.encode("gbk").decode(errors="ignore")
def get_Image_info(srcImage):
print(type(srcImage))#图像类型
print(srcImage.shape)#图像形状
print(srcImage.dtype)#图像数据类型
print(np.array(srcImage)[:2,:2])#显示部分图像数据
print("图像的高height: ",srcImage.shape[0])
print("图像的宽weight:",srcImage.shape[1])
print("图像的通道数channels: ",srcImage.shape[2])
print("图像的Size:",srcImage.size)
print("图像的维度ndim:",srcImage.ndim)
srcImage1=cv.imread('F:\OutputResult\SrcImage\saber9.jpg')
get_Image_info(srcImage1)
cv.namedWindow(zh_Ch("Saber原始图"),cv.WINDOW_NORMAL)
cv.imshow(zh_Ch("Saber原始图"),srcImage1)
#按下任意数字键退出显示
cv.waitKey(0)
cv.destroyAllWindows()
#输出:
<class 'numpy.ndarray'>
(1771, 1254, 3)
uint8
[[[255 255 255]
[255 255 255]]
[[255 255 255]
[255 255 255]]]
图像的高height: 1771
图像的宽weight: 1254
图像的通道数channels: 3
图像的Szie:6662502
图像的维度ndim:3
cv.imread() 函数:
- srcImage=cv.imread('imagename')默认读入三通道图像(灰度图像也复制三个通道)
- srcImage=cv.imread('imagename',-1)按照图像源格式通道读入图像(即原图像为灰度图像则读入单通道,原图像为三通道则保持三通道)
- srcImage=cv.imread('imagename',0)读入灰度图像
- 注意:
- cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)#命名一个窗口,且其窗口大小可调整。
- cv.imshow("input image", src)#显示图像
- 二者窗口名称应该相同,否则不能在一个窗口内显示出来图像。
- 另外opencv读取图片时尽量不要包含中文路径,窗口显示以及显示窗口命名时不要使用中文,若使用中文时需要查看相关编码与解码方式相对应。