从0开始:OpenCV入门教程【图像处理基础】

图像处理基础

一、OpenCV主要功能及模块介绍

1、内置数据结构和输入/输出

  • OpenCV内置了丰富的与图像处理有关的数据结构,如Image、Point、Rectangle等。
  • core模块实现了各种基本的数据结构。
  • imgcodecs模块提供了图像文件的读写功能,用户使用简单的命令即可读写图像文件。

2、图像处理操作

imgproc模块提供了图像处理操作,如图像过滤、几何图像变换、绘图、色彩空间转换、直方图等。

3、图形用户界面操作

highgui模块提供了图像的图形窗口操作功能,如创建窗口显示图像或者视频、令窗口响应键盘和鼠标事件、操作窗口中图像的某个区域等。

4、视频分析

video模块提供了视频分析功能,如分析视频中连续帧之间的运动、跟踪视频中的目标。videostab模块提供了视频稳定处理功能,可解决拍摄视频时的抖动问题。optflow模块提供了与光流操作相关的算法。

5、3D重建

calib3d模块提供了3D重建功能,可根据2D图像创建3D场景。

6、特征提取

features2d模块提供了特征提取功能,可以从2D图像中检测和提取对象的特征。

7、对象检测

objdetect和xobjdetect模块提供了对象检测功能,可在图像中检测给定图像的位置。

8、机器学习

ml模块提供了机器学习功能,包含了多种机器学习算法,如k近邻(k-Nearest Neighbors,kNN)、k均值聚类(k-Means Clustering)、支持向量机(Support Vector Machines,SVM)、神经网络(Neural Network)等。机器学习算法广泛应用于目标识别、图像分类、人脸检测、视觉搜索等。

9、深度学习

深度神经网络(Deep Neural Network,DNN)模块提供了深度学习功能。深度学习是机器学习中近几年来快速发展的一个子领域,广泛应用于语音识别、图像识别、自然语言处理、图像修复、人脸识别等。OpenCV的深度学习支持Caffe、TensorFlow、Torch、Darknet等著名的深度学习框架。

10、计算摄影

计算摄影通过图像处理技术来改善相机拍摄的图像,如高动态范围成像、全景图像、图像补光等。photo和xphoto模块提供了与计算摄影有关的算法,stitching模块提供了全景图像算法。

11、形态分析

shape模块提供了形态分析功能,可以识别图像中对象的形状、分析形状之间的相似性、转换对象形状等。

12、人脸检测和识别

OpenCV已在face模块中实现了人脸检测、人脸特征检测和人脸识别功能。人脸检测属于对象检测,用于找出图像中人脸的位置和尺寸。人脸特征检测属于特征检测,用于找出图像中人脸的主要特征。人脸识别属于对象识别,包括从已知人脸集合中找出与未知人脸最匹配的人脸,以及验证给定人脸是否为某个已知人脸。OpenCV实现了基于Haar级联分类器和基于深度学习的人脸检测算法,以及EigenFaces、FisherFaces和局部二进制编码直方图(Local Binary Patterns Histograms,LBPH)等人脸识别算法。

13、表面匹配

surface_matching模块提供了3D对象识别算法和3D特征的姿态估计算法,用于根据图像的深度和强度信息识别3D对象。

14、文本检测和识别

text模块提供了文本检测和识别功能,用于识别和检测图像中的文本,实现车牌识别、道路标志识别、内容数字化等相关应用。

二、图像基本操作

读取图像:cv.imread()

python 复制代码
import numpy as np

import cv2 as cv

#加载彩色灰度图像

img = cv.imread('messi5.jpg',0)

显示图像:cv.imshow()

python 复制代码
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()

写入图像:cv.imwrite()

python 复制代码
import cv2
import numpy

img=numpy.zeros((50,50),dtype=numpy.uint8)	#创建大小为50×50的黑色正方形图像

cv2.imwrite('messigray.jpg',img)  

思考题:如果我们想以灰度模式加载图像,显示图像,按s键可以保存图像并退出,或者按ESC键直接退出不保存,设计出代码。

python 复制代码
import numpy as np
import cv2 as cv
img = cv.imread('cat.jpg',0) #或者把0改成cv.IMREAD_GRAYSCALE
cv.imshow('cat.jpg',img)
k=cv.waitKey(0)
if k==27:
    cv.destroyAllWindows()
elif k==ord('s'):
    cv.imwrite('catgray.png',img)
    cv.destroyAllWindows()

其中注意:

  • 判断 ESC 键(ASCII码27):
    如果按下的是 ESC 键(对应的ASCII码是27),程序会调用 cv.destroyAllWindows() 关闭所有打开的窗口,不保存图像。
  • 判断 s 键:
    如果按下的是字母 s 键(ord('s') 用来获取字符 s 的 ASCII 码),程序会执行两步:
    1. 使用 cv.imwrite('catgray.png', img) 将当前图像保存为名为 'catgray.png' 的文件。
    2. 然后调用 cv.destroyAllWindows() 关闭所有窗口。

三、视频读取-摄像头读取

(1)将视频文件或者摄像头作为数据源来创建VideoCapture对象。

(2)调用VideoCapture对象的read()方法获取视频中的帧,每一帧都是一幅图像。

(3)调用VideoWriter对象的write()方法将帧写入视频文件,或者调用cv2.imshow()函数在窗口中显示帧(即播放视频)。

python 复制代码
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
if not cap.isOpened():
    print("Cannot open camera")
    exit()
while True:
    # 逐帧捕获
    ret, frame = cap.read()
    # 如果正确读取帧,ret为True
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    frame = cv.flip(frame, 1)
    out.write(frame)
    # 我们在框架上的操作到这里
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # 显示结果帧e
    cv.imshow('frame', frame)
    if cv.waitKey(1) == ord('q'):
        break
# 完成所有操作后,释放捕获器
cap.release()
out.release()
cv.destroyAllWindows()
  • 通过摄像头实时捕获视频;
  • 对每一帧进行水平镜像翻转;
  • 将处理后的帧保存为视频文件,同时在屏幕上实时显示视频画面;
  • 当用户按下 'q' 键时,停止视频捕获并释放所有资源。

像这样,还挺有趣的哈哈

后面可以结合图像识别做更有趣的操作,学起来~

相关推荐
南部余额1 小时前
Python OOP核心技巧:如何正确选择实例方法、类方法和静态方法
开发语言·python
2303_Alpha1 小时前
深度学习入门:深度学习(完结)
人工智能·笔记·python·深度学习·神经网络·机器学习
深度学习入门2 小时前
机器学习,深度学习,神经网络,深度神经网络之间有何区别?
人工智能·python·深度学习·神经网络·机器学习·机器学习入门·深度学习算法
森哥的歌3 小时前
Python uv包管理器使用指南:从入门到精通
python·开发工具·uv·虚拟环境·包管理
qq_214782613 小时前
给你的matplotlib images添加scale Bar
python·数据分析·matplotlib
Johny_Zhao3 小时前
Vmware workstation安装部署微软SCCM服务系统
网络·人工智能·python·sql·网络安全·信息安全·微软·云计算·shell·系统运维·sccm
waterHBO3 小时前
python + flask 做一个图床
python
ZWaruler4 小时前
二: 字典及函数的使用
python
蚰蜒螟4 小时前
深入解析JVM字节码解释器执行流程(OpenJDK 17源码实现)
开发语言·jvm·python
墨绿色的摆渡人4 小时前
pytorch小记(二十):深入解析 PyTorch 的 `torch.randn_like`:原理、参数与实战示例
人工智能·pytorch·python