通俗易懂||OpenCV笔记

1. Opencv简介

        入门前可以稍稍了解一些关于OpenCV的介绍,以下做简略介绍:

OpenCV 的主要功能:

  • 图像处理:包括图像变换(如缩放、旋转、仿射变换)、图像滤波(如平滑、锐化、边缘检测)、图像阈值处理等。
  • 视频分析:读取、显示视频文件,视频帧处理,视频流处理等。
  • 特征检测与匹配:检测图像中的关键点(如角点、边缘等),并用于图像匹配、目标识别等。
  • 对象检测:使用预训练的模型检测图像中的特定对象(如人脸、车辆等)。
  • 面部识别:利用面部特征进行身份认证或表情分析等。
  • 3D重建:从多视角图像或视频中重建三维场景。
  • 机器学习:OpenCV 包含了一些基本的机器学习算法,可用于图像分类、聚类等任务。

OpenCV 的官方文档:

官方网站: OpenCV - Open Computer Vision Library

文档页面: OpenCV-Python Tutorials

GitHub仓库:OpenCV GitHub Repository

1.1 图像相关概念

1.1.1 位数

计算机采用0/1编码的系统,数字图像也是利用0/1来记录信息。我们常接触的图像都是8位数图像,包含0~255灰度,其中0,表示最黑,1,表示最白。

8位图像:每个像素可以显示256种颜色的图像。这种图像通常被称为标准清晰度图像,广泛应用于电视和计算机屏幕上。8位图像可以显示的颜色数量为2e8 = 256种颜色(灰度图),对于彩色图像,如果每个颜色通道(红、绿、蓝)都是8位,则总颜色数为2563 = 16,777,216种颜色,这种图像也被称为24位图像或真彩色图像。

1.1.2 二值图

二值图是一种简洁的图像表示方式,它仅包含黑色和白色两种颜色,每个像素点非黑即白,没有中间灰度值。这种图像形式因其数据量小、处理方便且边缘清晰的特点,在图像分割、字符识别、计算机视觉等领域得到广泛应用。

1.1.3 灰度图

灰度图是一种图像表示方式,其中图像中的每个像素点具有不同的灰度级别,这些级别通常是从黑色(灰度值为0)到白色(灰度值为255)之间的连续变化。灰度图不包含颜色信息,只展示图像的亮度变化,因此在处理和分析图像时,能够更专注于图像的纹理、形状等特征。

1.1.4 彩色图

彩色图像是一种包含丰富色彩信息的图像表示方式。它不仅能够展现图像的亮度信息,还能通过红、绿、蓝(RGB,分量介于0~255)三种基色的不同组合来精确地表示出成千上万种颜色。彩色图像中的每个像素点都对应着这三个颜色通道上的具体数值,这些数值共同决定了该像素点的颜色。彩色图像因其色彩丰富、细节表现力强,被广泛应用于数字摄影、电影制作、广告设计、医学成像等多个领域,为人们提供了更加真实、生动的视觉体验。

1.2 OpenCV安装

可以参考这篇文章:Pycharm安装Opencv详细教程

https://blog.csdn.net/m0_56230886/article/details/140633611?spm=1001.2014.3001.5502icon-default.png?t=N7T8https://blog.csdn.net/m0_56230886/article/details/140633611?spm=1001.2014.3001.5502

1.3 OpenCV模块

OpenCV具有多个功能模块,包括深度神经网络模块(dnn)、机器学习模块(ML)、视频分析模块(Video)、快速近似最近邻库(Flann)、照片模块(Photo)、图像拼接模块(Stitching)、形状模块(Shape)、超分辨率模块(Superres)、视频稳定模块(Videstab)、3D可视化模块(Viz)、图像编解码模块(Imgcodecs)、对象检测模块(ObjDetect)、相机标定与三维重建模块(Calib3D)、核心模块(Core)、图像处理模块(Imgproc)、高GUI模块(Highgui)、特征检测与匹配模块(Features2D)等,其中标红部分为主要学习模块,简介如下:

  • 核心模块(Core)

该模块是其他模块的基础,提供了基本的核心功能、数据结构和函数。它包括了基本的数据类型、动态数据结构、数学函数、数组操作等。

  • 图像处理模块(Imgproc)

专门用于图像处理,包括色彩空间转换、几何变换(如缩放、旋转、仿射变换)、图像滤波(如平滑、锐化、边缘检测)、直方图操作等。

  • 高GUI模块(Highgui)

用于创建和操作图形用户界面元素,如显示图像的窗口、处理键盘和鼠标事件等。不过,在新版本的OpenCV中,Highgui的功能可能已被其他模块(如imgcodecs和videoio)所取代。

  • 特征检测与匹配模块(Features2D)

包括特征检测器(如SIFT、SURF、ORB等)和描述符提取器,用于在图像中检测关键点并提取其描述符,进而进行特征匹配和图像配准。

2 OpenCV基本操作

2.1 基本操作

2.1.1 图像读取、显示、保存

  • 图像读取:cv2.imread()
import cv2  
  
# 使用cv2.imread()读取图像  
# 参数1: 图像文件的路径  
# 参数2: 读取模式  
#     cv2.IMREAD_COLOR: 加载彩色图像,任何图像的透明度都会被忽略(默认)  
#     cv2.IMREAD_GRAYSCALE: 以灰度模式加载图像  
#     cv2.IMREAD_UNCHANGED: 包括alpha通道的加载图像  
image = cv2.imread('path_to_your_image.jpg', cv2.IMREAD_COLOR)  
  
# 检查图像是否成功加载  
if image is not None:  
    # 在这里处理图像  
    # 例如,显示图像  
    cv2.imshow('Loaded Image', image)  
    # 等待按键操作  
    cv2.waitKey(0)  
    # 关闭所有OpenCV窗口  
    cv2.destroyAllWindows()  
else:  
    print("Error: Image could not be read.")

注:图像路径中不得存在中文,否则会出现cv2.error: OpenCV(4.10.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:973: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'错误。

注:opencv图像读取通道为B\G\R,matplotlib图像读取通道为R\G\B

  • 显示图像:cv2.imshow()
# 显示图像,'Image Window'是窗口名称,image是要显示的图像  
cv2.imshow('Image Window', image)  
  
# 等待按键事件,参数为等待时间(毫秒),0表示无限期等待,按任意键结束
cv2.waitKey(0)  
  
# 关闭所有OpenCV创建的窗口  
cv2.destroyAllWindows()
  • 保存图像 :cv2.imwrite()
import cv2  
  
# 读取图像  
image = cv2.imread('input.jpg')  
  
# 检查图像是否正确读取  
if image is None:  
    print("Error: 图像未能正确读取")  
else:  
    # 保存图像  
    is_saved = cv2.imwrite('output.png', image)  
  
    # 检查图像是否保存成功  
    if is_saved:  
        print("图像已保存")  
    else:  
        print("Error: 图像未能保存")

注:保存图像路径设置最好不要有中文!!! 

2.1.2 图像上绘制几何图形

  • 绘制直线:使用cv2.line()函数来绘制线条。你需要指定线条的起点和终点坐标,以及线条的颜色和粗细。
import cv2  
import numpy as np  
  
# 创建一个黑色的空白图像  
img = np.zeros((512,512,3), np.uint8)  
  
# 绘制一条对角线  
cv2.line(img,(0,0),(511,511),(255,0,0),5)  
  
# 显示图像  
cv2.imshow('image',img)  
cv2.waitKey(0)  
cv2.destroyAllWindows()
  • 绘制矩形:使用cv2.rectangle()函数来绘制矩形。你需要指定矩形的左上角和右下角坐标,以及颜色和线条粗细(或者如果填充的话,使用-1作为线条粗细)。
import cv2  
import numpy as np  
  
# 创建一个黑色的空白图像  
img = np.zeros((512,512,3), np.uint8)  
  
# 绘制一个蓝色的矩形  
cv2.rectangle(img,(384,0),(510,128),(255,0,0),3)  
  
# 绘制一个填充的矩形  
cv2.rectangle(img,(0,384),(128,510),(0,255,0),-1)  
  
cv2.imshow('image',img)  
cv2.waitKey(0)  
cv2.destroyAllWindows()
  • 绘制圆形:使用cv2.circle()函数来绘制圆形。你需要指定圆心的坐标、半径、颜色以及线条粗细(或者如果填充的话,使用-1)。
import cv2  
import numpy as np  
  
# 创建一个黑色的空白图像  
img = np.zeros((512,512,3), np.uint8)  
  
# 绘制一个绿色的圆  
cv2.circle(img,(447,63), 63, (0,255,0), -1)  
  
cv2.imshow('image',img)  
cv2.waitKey(0)  
cv2.destroyAllWindows()
  • 绘制多边形:对于多边形,你可以使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值