当前位置: 代码迷 >> 综合 >> 一、opencv-python安装与初步认识
  详细解决方案

一、opencv-python安装与初步认识

热度:49   发布时间:2023-09-22 23:02:04.0

教程汇总:python基础入门系列

简介

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

在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。
此外,OpenCV还提供了Java、python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。

学习OpenCV开发需要了解基本的计算机颜色表达方式,以及各种颜色模型的特点。

安装

可以像其他三方包安装方法一样直接pip安装opencv-python包(非官方): pip install opencv-python
但我这里不推荐使用上述方法,可以到https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv网址下载OpenCV的安装包whl文件,注意要根据自己的python版本下载
一、opencv-python安装与初步认识
比如我选择的opencv_python?4.5.3?cp37?cp37m?win_amd64.whl,其中4.5.3是OpenCV的版本,cp37表示是适配python3.7的,最后amd64是在64位机电脑上使用的,了解了各字段含义我们就可以选择下载适合自己的版本了。
下载好后放到python安装目录的Scripts目录下C:\Users\USER\AppData\Local\Programs\Python\Python37\Scripts ,在该目录下打开cmd并使用pip install opencv_python?4.5.3?cp37?cp37m?win_amd64.whl进行安装。
OpenCV官方文档:https://opencv-python-tutroals.readthedocs.io/en/latest/

另外OpenCV开发过程中我们经常会用的的一些其他三方库也一起装一下:

pip install numpy 
pip install matplotlib
  • numpy :
    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
    学习资料:https://www.runoob.com/numpy/numpy-tutorial.html
  • matplotlib :
    Python 的2D绘图库,提供了一种有效的 MatLab 开源替代方案
    学习资料:https://www.runoob.com/numpy/numpy-matplotlib.html

opencv简单图像处理

图像像素存储形式

首先得了解下图像在计算机中存储形式:

对于采用RGB模式的彩色图片,为三通道图,Red、Green、Blue三原色,按不同比例相加,一个像素块对应矩阵中的一个向量, 如[24,180, 50],分别表示三种颜色的比列, 即对应深度上的数字,如下图所示:
一、opencv-python安装与初步认识
我们知道电子显示屏每个像素点实际上有RGB3个发光单元组成,通过调节像素点的RGB值可以组合成各种颜色,于是就可以显示彩色图像。 对于rgb彩色图来说,在内存中每一个像素点都需要有rgb3个值来表示,每个值取值范围在0-255。而灰度图,也就是只有黑白颜色的图只需要一个通道0-255数值就可以表示。这样灰度图实际上只需要占用原本彩色图1/3的内存。但显示器是需要三个RGB3通道数据的,如果显示灰度图只需要让RGB3个值设置相同的灰度值,再送入显示。

opencv加载图片就是用数组矩阵(numpy的array)存放的,RGB彩图3通道数据构成如下图:
一、opencv-python安装与初步认识

需要注意的是,由于历史遗留问题,opencv采用BGR模式,而不是RGB,这个导致了颜色分量的排布相反。

图像读取和写入

注意:opencv模组的引用名是cv2,python代码里import cv2即可
cv2.imread()

imread(img_path,flag) 读取图片,返回图片对象img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为Noneflag:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1

cv2.imshow()

imshow(window_name,img):显示图片,窗口自适应图片大小window_name: 指定窗口的名字img:显示的图片对象可以指定多个窗口名称,显示多个图片waitKey(millseconds)  键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同)millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入0时,会一直等待键盘事件destroyAllWindows(window_name) window_name: 需要关闭的窗口名字,不传入时关闭所有窗口

cv2.imwrite()

imwrite(img_path_name,img)img_path_name:保存的文件名img:文件对象

使用示例1:

#coding:utf-8import cv2
img = cv2.imread(r"C:\Users\Administrator\Desktop\roi.jpg")
# print(img.shape)
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,img_threshold = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)
cv2.imshow("img",img)
cv2.imshow("thre",img_threshold)key = cv2.waitKey(0)
if key==27: #按esc键时,关闭所有窗口print(key)cv2.destroyAllWindows()
cv2.imwrite(r"C:\Users\Administrator\Desktop\thre.jpg",img_threshold)

使用示例2:

import cv2
color_img=cv2.imread('4.jpg')
print(color_img.shape)# 读取单通道
gray_img=cv2.imread('4.jpg',cv2.IMREAD_GRAYSCALE)
print(gray_img.shape)#把单通道图像保存后,再读取,仍然是3通道,相当于将单通道复制到3个通道保存
cv2.imwrite('grayscale_4.jpg',gray_img)
reload_grayscale=cv2.imread('grayscale_4.jpg')
print(reload_grayscale.shape)# 指定jpg质量,范围从1~100,默认95,值越高画质越好,文件越大
cv2.imwrite('anglababy.jpg',color_img,(cv2.IMWRITE_JPEG_QUALITY,20))