Python第三方cv2库介绍

article/2025/9/22 16:37:46

Python第三方cv2库介绍

CV2指的是OpenCV2(Open Source Computer Vision Library),是一个开源的库平台计算机视觉库。有很强大的图片处理功能,可实现图像处理和计算机视觉方面的很多通用算法。

OpenCV官网文档 https://docs.opencv.org/4.1.2/d6/d00/tutorial_py_root.html
中文文档http://www.woshicver.com/
 

特别提示:安装的时候用 opencv_python,但在导入使用的时候使用 cv2。

在Windows环境中Python模块(库、包)安装命令格式,在cmd中:

[py -X.Y -m] pip install [-i 镜像网址] 模块(库、包)名

其中[]部分表示可选的

若安装了多个python版本,X.Y代表Python版本,多余的部分舍弃如3.8.1取3.8,3.10.5取3.10,即只取第二个点前的部分。仅安装了一个python版本不需要。

使用镜像网址可以加快安装速度,常用的镜像网址

清华:https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:https://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

【参见https://blog.csdn.net/cnds123/article/details/104393385】

我这里使用 (安装了多个python版本 要为3.9.1版本安装cv2库——opencv_python,使用阿里云镜像。安装的时候是 opencv_python,但在导入的时候采用 import cv2。):

py -3.10 –m pip install -i https://mirrors.aliyun.com/pypi/simple/ opencv_python

参见下图:

 最后,检测安装情况

注意:使用cv2库的时候,文件名和路径不能有中文,一旦有中文就会有各种莫名其妙的错误!

读入图片并显示

读入一张图片函数:cv2.imread(filepath,flags)  

其中filepath表示图片的路径

flags表示要读入的是什么图片:

(1)cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道(或者直接写1)

(2)cv2.IMREAD_GRAYSCALE:读入灰度图片(或者直接写0)

显示一张图片函数:cv2.imshow(window_name, image)  

其中,第一个参数是窗口的名字,第二个参数是要显示的图像

键盘绑定函数cv2.waitKey(delay)

其中delay 的单位为ms毫秒,当 delay 取大于0的值时,程序在给定的 delay 时间内等待用户按键触发关闭图形显示窗口,或等到时间到关闭图形显示窗口。若设置delay为0,则代表等待按任意键关闭图形显示窗口。

没有它,窗口会在程序完成是立即关闭图形显示窗口。

提示,脱离IDLE环境时才能看到此函数的效果,如双击py脚本文件运。

下面给出读入图片并显示之源码

import cv2
image1=cv2.imread(r"D:/cv2Demo/lotus2.png")
cv2.imshow("image1",image1)
cv2.waitKey(0)

运行之:

将图像保存

函数 cv2.imwrite() 用于将图像保存到指定的文件。

cv2.imwrite(filename, img [, paras])

参数说明:

filename:要保存的文件的路径和名称,包括文件扩展名

img:要保存的 OpenCV 图像,nparray 多维数组

paras:不同编码格式的参数,可选项

将彩色图片转成灰度图片保存

源码如下:

import cv2
image1=cv2.imread(r"D:/cv2Demo/lotus2.png",0)
cv2.imwrite(r"D:/cv2Demo/lotus2As.png",image1)

图像缩放

图像缩放函数cv2.resize(image, image2,dsize)

输入原始图像,输出新图像,图像的大小)

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

参数说明:

scr:变换操作的输入图像

dsize: 输出图像的大小,二元元组 (width, height)

dst:变换操作的输出图像,可选项

fx, fy:x 轴、y 轴上的缩放比例,实型,可选项

interpolation:插值方法,整型,可选项

cv2.INTER_LINEAR:双线性插值(默认方法)

cv2.INTER_AREA:使用像素区域关系重采样,缩小图像时可以避免波纹出现

cv2.INTER_NEAREST:最近邻插值

cv2.INTER_CUBIC:4x4 像素邻域的双三次插值

cv2.INTER_LANCZOS4:8x8 像素邻域的Lanczos插值

图像缩为原来1/4

源码如下:

import cv2
image1=cv2.imread(r"D:/cv2Demo/lotus2.png")
print(image1.shape) #
height, width = image1.shape[:2]  # 获取图片的高度和宽度
image2=cv2.resize(image1,(int(0.5*width), int(0.5*height)))
print(image2.shape) #
cv2.imwrite(r"D:/cv2Demo/lotus2Quarter.png",image2)#保存

图像翻转

图像翻转函数cv2.flip(src, flipCode[, dst])

参数说明:

scr:变换操作的输入图像

flipCode:控制参数,整型(int),flipCode>0 水平翻转,flipCode=0 垂直翻转,flipCode<0 水平和垂直翻转

dst:变换操作的输出图像,可选项

图像翻转源码:

import cv2
image1=cv2.imread(r"D:/cv2Demo/lotus2.png")
imgFlip1 = cv2.flip(image1, 1)  # 0垂直翻转 ;1水平翻转 ;-1水平和垂直翻转
cv2.imshow("image2",imgFlip1)
cv2.waitKey(0)

图像旋转

实现图像的直角倍数旋转函数cv2.rotate(src, rotateCode[, dst])

cv2.rotate()以90度的倍数旋转2D阵列(array),速度很快。

参数说明:

src:变换操作的输入图像

rotateCode:枚举,指定旋转角度。

  cv2.ROTATE_90_CLOCKWISE:顺时针旋转 90 度

  cv2.ROTATE_180: 旋转 180 度

  cv2.ROTATE_90_COUNTERCLOCKWISE:逆时针旋转 90 度

dst:它是与src图像大小和深度相同的输出图像。它是一个可选参数。

图像顺时针旋转90度源码:

import cv2
image1=cv2.imread(r"D:/cv2Demo/lotus2.png")
image2 = cv2.rotate(image1,cv2.ROTATE_90_CLOCKWISE) #顺时针旋转90度
cv2.imshow("image2",image2)
cv2.waitKey(0)

下面介绍图像旋转任意角度,先介绍用到两个函数

获取旋转变换矩阵函数cv2.getRotationMatrix2D(center, angle, scale)

参数说明:

center:旋转中心坐标,二元元组 (x0, y0)

angle:旋转角度,单位为角度,逆时针为正数,顺时针为负数

scale: 缩放因子

利用变换矩阵对图像进行变换函数cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])

其中:

src - 输入图像。

M - 变换矩阵。

dsize - 输出图像的大小。

flags - 插值方法的组合(int 类型!)

borderMode - 边界像素模式(int 类型!)

borderValue - (重点!)边界填充值; 默认情况下,它为0。

下面介绍图像旋转任意角度的三种实现方法

法一、图像旋转任意角度源码(有剪裁)

 

​​​​​​​源码如下:

#图像旋转任意角度源码(有剪裁)
import cv2#第一个参数穿opencv读取的图像,第二个参数传入需要旋转的角度
def rotate_bound(image, angle):height, width = image.shape[:2]     # 取前两个值(H,W) # 第一个参数旋转中心,第二个参数旋转角度,第三个参数缩放比例 center = ( width//2,height//2)  # 以图像中心为旋转中心 scale = 1                 # 等比例旋转,即旋转后尺度不变 # 获得旋转矩阵 M = cv2.getRotationMatrix2D(center, -angle, scale)# 进行仿射变换,其中#“,borderValue=(255,255,255)”定义边界填充色彩白色,省略默认黑色,相当于borderValue=(0,0,0)return cv2.warpAffine(image, M, (width, height),borderValue=(255,255,255))image1 = cv2.imread(r"D:/cv2Demo/lotus2.png")
image2 = rotate_bound(image1, 45)
cv2.imshow('image', image2)  #显示图片
cv2.waitKey(0)

法二、图像旋转任意角度源码(无剪裁)

源码如下:

#图像旋转任意角度源码(无剪裁)
import numpy as np
import cv2
#第一个参数穿opencv读取的图像,第二个参数传入需要旋转的角度
def rotate_bound(image, angle):# 获取图像的尺寸,并确定中心(h, w) = image.shape[:2](cX, cY) = (w // 2, h // 2)# 获取旋转矩阵(应用角度的负数以顺时针旋转)# 获取正弦和余弦(即矩阵的旋转分量)M = cv2.getRotationMatrix2D((cX, cY), -angle, 1.0)cos = np.abs(M[0, 0])sin = np.abs(M[0, 1])#计算图像的新边界尺寸nW = int((h * sin) + (w * cos))nH = int((h * cos) + (w * sin))# 调整矩阵M[0, 2] += (nW / 2) - cXM[1, 2] += (nH / 2) - cY#进行仿射变换,其中#“,borderValue=(255,255,255)”定义边界填充色彩白色,省略默认黑色,相当于borderValue=(0,0,0)return cv2.warpAffine(image, M, (nW, nH),borderValue=(255,255,255))image1=cv2.imread(r"D:/cv2Demo/lotus2.png")
image2 = rotate_bound(image1, 45)
cv2.imshow('image', image2)  #显示图片
cv2.waitKey(0)
#cv2.imwrite(r"D:/cv2Demo/lotus2AsSave.png", image2) #保存

法三、图像旋转任意角度源码(无剪裁之二)

源码如下(请和法二对比):

#图像旋转任意角度源码(无剪裁之二)
import cv2
import numpy as np def opencv_rotate(img, angle):h, w = img.shape[:2]  # 图像的(行数,列数,色彩通道数)  center = (w / 2, h / 2)scale = 1.0# 1 获取M矩阵# cv2.getRotationMatrix2D(获得仿射变化矩阵)M = cv2.getRotationMatrix2D(center, -angle, scale)# 2 扩大画布,新的宽高,radians(angle) 把角度转为弧度 sin(弧度)new_H = int(w * np.fabs(np.sin(np.radians(angle))) + h * np.fabs(np.cos(np.radians(angle))))new_W = int(h * np.fabs(np.sin(np.radians(angle))) + w * np.fabs(np.cos(np.radians(angle))))# 3 平移M[0, 2] += (new_W - w) / 2M[1, 2] += (new_H - h) / 2# cv2.warpAffine(进行仿射变化)rotate = cv2.warpAffine(img, M, (new_W, new_H), borderValue= (0, 0, 0))return rotateimage1=cv2.imread(r"D:/cv2Demo/lotus2.png")
image2 = opencv_rotate(image1, 45)
cv2.imshow('image', image2)  #显示图片
cv2.waitKey(0)
#cv2.imwrite(r"D:/cv2Demo/lotus2AsSave.png", image2) #保存

 OK!


http://chatgpt.dhexx.cn/article/utkqYGba.shtml

相关文章

cv2安装与基本函数

简介 cv2是一个python的图像处理库&#xff0c;依赖c的opencv库处理图像。 安装 使用 pip install numpy pip install opencv-python 即可安装cv2及numpy 输入 >>> import cv2 >>> import numpy as np#cv2读取的图片都是numpy数组 >>> cv2.__…

Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)最强详细攻略

Py之cv2&#xff1a;cv2(OpenCV&#xff0c;opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)最强详细攻略 目录 cv2(OpenCV&#xff0c;opencv-python)库的简介 1、OpenCV应用领域 1.1、计算机视觉领域方向 1.2、计算机操作底层技术 cv2(OpenCV&#x…

常用的SQL语句

删除数据库中表的某些相同的某些记录 OR 查找数据库的表中的相同记录 一、删除数据库中表的某些相同的某些记录 delete from tablename where only_Id not in(select min(only_id) from tablename group by sameName) 二、选出相同记录的SQL语句 AND 删除相同记录的SQL语句…

数据库基础(常用SQL语句)

一、数据库级及SQL语言简介 1、目前主流数据库 微软&#xff1a;sql server、access 瑞典&#xff1a;mysql ibm: db2 sybase:sybase ibm: informix oracle: oracle 2、SQL语言 DQL-------------数据查询语言 select … From … Where DML-------------数据操纵语言 insert、…

SQL基本语句(整理)

一、DDL(Data Definition Language) 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09; ①查询 查询所有数据库 show databases; 查询当前数据库 select database(); ②创建 create database [if not exists] 数…

SQL常用语句(基础篇)

SQL常用语句&#xff08;基础篇) 说明&#xff1a;创建数据库 CREATE DATABASE database-name 说明&#xff1a;删除数据库 drop database dbname 说明&#xff1a;备份sql server —创建备份数据的device USE master EXEC sp_addumpdevice ‘disk’&#xff0c;‘testBac…

SQL最常用的语句

语法&#xff1a; 一步步由浅到深&#xff0c;这里用的都是mysql做的。 基础&#xff1a; 连接数据库&#xff1a; mysql -h10.20.66.32 -uroot -p123456 1 -h后面是mysqlServer所在地址&#xff0c;-u后面是用户名&#xff0c;-p后面是密码。 查看数据库 show database…

数据库常用sql语句总结

查看时右侧可以打开CSDN自带的目录&#xff0c;方便查看 目录 一、基础 1.SELECT 语句 2.SELECT DISTINCT 语句 3.WHERE 子句 4.AND 和 OR 运算符 5.ORDER BY 语句 6.INSERT INTO 语句 7.Update 语句 8.DELETE 语句 二、高级 1.TOP 子句 2.LIKE 操作符 3.SQL 通配…

10个必须掌握的SQL常用语句

世界上70%的相关性数据可以被储存为表格数据&#xff0c;即类似Excel&#xff0c;Csv类型的数据&#xff0c;如何去查询和分析相关性的数据&#xff1f;对于少量数据&#xff0c;我们可以使用Excel&#xff0c;更多一点数据&#xff0c;我们可以使用Python, pandas 处理大数据 …

从零开始USRP+GNRRADIO系列(基础入门篇和C++自定义模块)

从零开始USRPGNRRADIO系列&#xff08;基础入门篇&#xff09; 文章目录 从零开始USRPGNRRADIO系列&#xff08;基础入门篇&#xff09;usrp简介创建第一个usrp图C自定义模块 usrp简介 通用软件无线电外设&#xff08;USRP&#xff09;是由Ettus Research及其母公司National I…

入门学习计算机第十八天——自定义数据类型(结构体)

入门学习计算机第十八天——自定义数据类型&#xff08;结构体&#xff09; 编译器&#xff1a;Microsoft Visual Studio 2019 自定义类型&#xff1a; 结构体枚举联合体 结构体 结构体类型的声明 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量 结构的…

【计算机基础】

文章目录 线程、协程的状态 计算机网络DNS解析 计算机基础进程间通讯的7种方式讲一下程序的虚拟内存、常驻内存和逻辑内存。堆和栈是存啥的&#xff1f;什么是大小端? 什么是死锁&#xff1f;什么情况下会发生&#xff08;避免&#xff09;死锁&#xff1f;死锁产生的4个必要条…

计算机基础(1)

目录 一、计算机发展 1.1计算机发展史 1.2计算机分类 1.2.1按规模划分 1.2.2服务器与客户机 1.2.2.1 服务器按外形分类 1.3服务器硬件 一、计算机发展 1.1计算机发展史 1、第一代计算机(1946-1957) 电子管时代 冯诺依曼体系结构&#xff1a;数字计算机的数制采用二进…

计算机基础介绍

1、组成部分 中央处理器、内存、存储设备、输入/输出设备、通信设备&#xff08;各部分通过总线来连接&#xff09; 2、冯诺依曼体系结构&#xff1a;现代计算机的基础 3、中央处理器&#xff08;CPU&#xff09;——计算机的大脑 &#xff08;1&#xff09;作用&#xff1a…

C语言基础入门——自定义类型

学习目标&#xff1a; 学习并了解C语言自定义类型 目录 学习目标&#xff1a; 一、结构体 ●结构体的声明 ●结构体的引用 ●结构体的定义和初始化 ●结构体的内存对齐 ●结构体的传参 ●结构体的位段&#xff08;位段的可填充和可移植性&#xff09; 二、枚举 ●枚举的定…

1.计算机基础

目录 1.1计算机系统 1.3 计算机硬件 1.4 计算机常用计数制 1.5 数据表示 1.1计算机系统 计算机多种形式&#xff1a;电脑&#xff0c;笔记本&#xff0c;智能手机&#xff0c;服务器等&#xff1b; 两部分组成&#xff1a;硬件系统和软件系统。 1.1.1 世界上第一台计算机 世…

一、计算机基础

计算机基础 一、第 1 章 计算机基础知识1-1 计算机概述1-1-1 计算机的产生与发展&#xff08;一&#xff09;计算工具的发展&#xff08;二&#xff09;现代计算机的发展&#xff08;三&#xff09;计算机的分代&#xff08;四&#xff09;计算机新技术的发展 1-1-2 计算机的特…

计算机基础及入门

1、计算机基本概念 1.1、计算机是什么 计算机&#xff08;computer&#xff09;&#xff1a; 俗称电脑&#xff0c;是现代一种用于高速计算的电子计算机器 特点&#xff1a; 数值计算&#xff1b;逻辑计算&#xff1b;存储记忆&#xff1b;能按照程序运行、自动、高速处理处理…

计算机基础入门

说明&#xff1a;计算机包含硬件(hardware)和软件(software)两部分。 计算机分为6大硬件&#xff1a; 1.CPU 即中央处理器&#xff08;central processing unit&#xff0c;简称CPU&#xff09;作为计算机系统的运算和控制核心&#xff0c;是信息处理、程序运行的最终执行单元。…

计算机基础的介绍

计算机概念 这是一个家用计算机的硬件和软件组成&#xff1a; 计算机软件代码最基层 — 固件&#xff0c;在计算机首次启动时由处理器运行一些引导加载程序&#xff0c;比如从U盘、光盘等读取操作 系统。这些程序永久储存在计算机内存中&#xff0c;所以称作固件。嵌入式操作…