Python-初学openCV——对openCV的简单使用

一、概述

1、简单介绍

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,旨在为实时图像处理提供强大的功能。它由Intel开发,现由开源社区维护。OpenCV 提供了跨平台的解决方案,支持 Windows、Linux、macOS、iOS 和 Android 系统,适用于各种应用场景

2、OpenCV的主要特点:

图像和视频处理:OpenCV 提供了强大的图像处理和视频处理功能,包括图像读取、写 入、显示,图像滤波、变换、边缘检测、轮廓识别等。

计算机视觉:包括人脸检测、物体识别、图像分类、特征匹配、跟踪目标等高级应用。

机器学习:内置了一些机器学习算法,支持分类、回归、聚类等任务。

GPU加速:支持基于CUDA的GPU加速,能够在处理大量数据时显著提高计算效率。

广泛的应用场景:被广泛应用于工业自动化、监控系统、医疗图像处理、无人驾驶等领 域。

3、环境安装

在要使用openCV的环境中输入下面指令:

bash 复制代码
pip install opencv-python

但直接通过以上命令安装对网速要求巨大,推荐使用下面的镜像源安装:

bash 复制代码
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

二、使用前的基础理论知识掌握

1、像素

像素是图像的基本单元,每个像素存储着图像的颜色、亮度和其他特征。一系列像素 组合到一起就形成了完整的图像

2、通道(RGB)

opencv中常用的是8位图像,大多数彩色和灰度图像使用8位表示每个通道的像素值,范 围从0到255,其中0,代表最黑,1,表示最白。

日常生活中常见的图像是RGB三原色图。RGB图上的每个点都是由红(R)、绿 (G)、蓝(B)三个颜色按照一定比例混合而成的,几乎所有颜色都可以通过这三种颜色按 照不同比例调配而成。在计算机中,RGB三种颜色被称为RGB三通道,每个通道的取值都 是0-255,根据这三个通道存储的像素值,来对应不同的颜色。

3、图像存储

在OpenCV中,无论是读取还是创建图像,结果都是一个NumPy数组

a. 彩色图像:三维数组

b. 灰度图像:二维数组

图像本质上是像素值的二维或三维矩阵(彩色图像)

a. 形状:图像的尺寸由其高、宽和通道数决定。

(彩色图像返回一个包含三个值的元组(h, w, c)

灰度图返回一个包含两个值的元组( h,w)因为灰度图只有一个通道)

b. 数据类型:图像中的每个像素值的数据类型决定了可以存储的最大值

c. 像素表示:

单通道图像(灰度图像):每个像素由一个数值表示,代表该点的亮度。值 越低(接近0),颜色越暗;值越高(接近255),颜色越亮。

多通道图像(彩色图像): 在OpenCV中,默认情况下,彩色图像是以BGR (蓝-绿-红)顺序存储

三、基础操作

cv2.imshow(图片名, 读取的图片):显示图片

(注意:在调用显示图像的API后,要调用cv2.waitKey(0)给图像绘制留下时间,否则窗口会出现无响应情况,并且图像无法显示出来)

cv2.waitkey(n): 图片显示时长,n 的单位为毫秒,当 n = 0 时,图片一直显示

cv2.destroyAllWindows(): 关闭所有显示窗口,释放资源

1、读取图片

cv2.imread(path[,读取方式])

python 复制代码
img  = cv2.imread("../cat/cat_3.jpg")
#将图片转化成灰度图
img1 = cv2.imread("../cat/cat_3.jpg",cv2.IMREAD_GRAYSCALE)

(./:当前目录;../:上级目录,)

示例:

2、保存图像

cv2.imwrite(path, img)

python 复制代码
cv2.imwrite('../data/f_cat_4.jpg',img)

(代码解析 :将 img 图片保存成指定的data目录下的 f_cat_4.jpg )

3、创建黑白图像

3.1 全黑图像:

使用**np.zeros()**创建全黑图像

python 复制代码
numpy.zeros((height,width,channels),dtype=np. uint8)

3.2 全白图像:

python 复制代码
np.full((h, w, c),fill_value,dtype = np.uint8)

(fill_value == 255 时就是全白图像)

拓展:也可以通过下面这种方法把全黑图像转换成全白图像

python 复制代码
black = np.zeros((360,480,3),dtype = np.uint8)
cv2.imshow('white',black)

black[:,:,:] = 255
cv2.imshow('white1',black)

black[:,:] = 255
cv2.imshow('white2',black)

black[:] = 255
cv2.imshow('white3',black)

4、图片裁切

Opencv中, 图像的裁切其实就是对图像的数组形式进行切片,用于从图像中提取一个 子区域(矩形区域)

(注意:先切高,后切宽)

bash 复制代码
img[y:y+h,x:x+w]的含义如下:
  x:子区域左上角的x坐标
  y:子区域左上角的y坐标
  w:子区域的宽度
  h:子区域的高度

**img[y:y+h,x:x+w]**提取的是从(x,y)开始,高度为h,宽度为w的矩形区域

5、图像大小调整

cv2.resize是Opencv库中用于调整图像大小的函数,在图像处理中很常用,特别是在 要对图像进行缩放以适应不同需求时

python 复制代码
cv2.resize(img,dsize)
#img:输入图像,通常是二维或三位NumPy数组。
#dsize:输出图像的尺寸,是一个二元组`(w,h)`,

6、读取视频

cap = cv2.VideoCapture(path)

(path: 视频流资源路径, 设置为 0 时代表从默认摄像头捕获视频流 )

ret,frame = cap.read()

(返回值cap调用read()方法得到一个布尔值和一帧图像,布尔值表示是否成功读取到 帧,如果为False,可能是因为视频结束或读取失败,如果为True,frame则是当前帧的 图像数据 )

示例:(参考代码)

四、图像绘制

1、绘制直线

cv2.line()

python 复制代码
cv2.line(img,start,end,color,thickness)
  #img:要绘制直线的图像
  #start、end:直线的起点和终点
  #color:直线的颜色(对于彩色图像,使用 BGR 格式指定颜色)
  #thickness:线条宽度

示例:

2、绘制矩形

cv2.rectangle()

python 复制代码
cv2.rectangle(img,leftupper,rightdown,color,thickness)
  #img:要绘制矩形的图像
  #leftupper、rightdown:矩形的左上角和右下角坐标
  #color:线条的颜色
  #thickness:线条的宽度

示例:

3、绘制圆形

cv2.circle()

python 复制代码
cv2.circle(img,centerpoint,r,color,thickness)
  #img:要绘制圆形的图片
  #centerpoint、r:圆心和半径
  #color:线条颜色
  #tnickness:线条宽度,为-1时生成闭合图案并填充颜色

示例:

相关推荐
lixzest14 分钟前
快速梳理遗留项目
java·c++·python
xnglan43 分钟前
使用爬虫获取游戏的iframe地址
开发语言·爬虫·python·学习
zhysunny1 小时前
04.建造者模式的终极手册:从快餐定制到航天飞船的组装哲学
java·开发语言·建造者模式
郝学胜-神的一滴1 小时前
建造者模式:构建复杂对象的优雅方式
开发语言·c++·程序人生·建造者模式
AAIshangyanxiu1 小时前
最新基于R语言结构方程模型分析与实践技术应用
开发语言·r语言·结构方程模型·生态统计学
cwn_2 小时前
Sequential 损失函数 反向传播 优化器 模型的使用修改保存加载
人工智能·pytorch·python·深度学习·机器学习
老鱼说AI2 小时前
Transformer Masked loss原理精讲及其PyTorch逐行实现
人工智能·pytorch·python·深度学习·transformer
lxmyzzs2 小时前
【已解决】YOLO11模型转wts时报错:PytorchStreamReader failed reading zip archive
人工智能·python·深度学习·神经网络·目标检测·计算机视觉·bug
Fly-ping3 小时前
【前端】JavaScript 的事件循环 (Event Loop)
开发语言·前端·javascript
范纹杉想快点毕业3 小时前
基于C语言的Zynq SOC FPGA嵌入式裸机设计和开发教程
c语言·开发语言·数据库·嵌入式硬件·qt·fpga开发·嵌入式实时数据库