• opencv从入门到精通 哦吼01


    目录

    前言 Preface

    1.2 OpenCV 概述

    图像处理的基本操作

    显示图像

    保存图像

    获取图像属性

    像素的操作


    本次主要分为这几个阶段

    第 1 篇:入门篇。本篇包括 Python 与 OpenCV、搭建开发环境、图像处理的基本操作、像素的操作和色彩空间与通道。这些内容的作用相当于「扫盲」,即完成一个从「什么都不知道」到「掌握关键知识点」的转变过程,为学习后面的内容奠定基础。

    第 2 篇:基础篇。本篇介绍了绘制图形和文字、图像的几何变换、图像的阈值处理和图像的运算。学习完这一部分后,读者不仅能够直观地看到运用 OpenCV 处理图像后的效果,还能够了解 OpenCV 程序的编码步骤和注意事项。

    第 3 篇:进阶篇。本篇的内容较多,包含了 6 章内容,分别是模板匹配、滤波器、腐蚀与膨胀、图形检测、视频处理以及人脸检测和人脸识别。这 6 章内容虽然相对独立,但是在实际开发过程中,是相辅相成、相得益彰的。

    第 4 篇:项目篇。本篇通过一个完整的小型 MR 智能视频打卡系统,按照「需求分析 → 系统设计 → 文件系统设计 → 数据实体模块设计 → 工具模块设计 → 服务模块设计 → 程序入口设计」顺序,手把手指导读者运用 Python OpenCV 完成软件项目的开发实践

    前言 Preface

    OpenCV 的设计初衷是提供易于使用的计算机视觉接口,以帮助开发人员在实际开发中快速建立精巧的视觉应用。为此,OpenCV 库包含了从计算机视觉各个领域衍生出来的 500 多种方法。这使得 OpenCV 自测试版发布以来,就被广泛地应用在安保行业、航空领域和其他高精尖的科研工作中。近年来,随着 Python 语言的强势崛起,Python OpenCV 已经成为一个很好的学习方向。

     

    1.2 OpenCV 概述

    OpenCV 是一个开源的计算机视觉库,可以在 Windows、Linux、MacOS 等操作系统上运行。它起源于英特尔性能实验室的实验研究,由俄罗斯的专家负责实现和优化,并以为计算机视觉提供通用性接口为目标。

    人类的视觉能够很轻易地从这幅图像中识别花朵。但是,计算机视觉不会像人类视觉那样能够对图像进行感知和识别,更不会自动控制焦距和光圈,而是把图像解析为按照栅格状排列的数字。以图 1.7 为例,计算机视觉将其解析为如图 所示的按照栅格状排列的数字(图 下只是图 1.7 的一部分)。

    图像处理的基本操作

    OpenCV 的作用在于让开发人员更容易地通过编码来处理图像。那么,处理图像需要执行哪些操作呢?图像处理的基本操作包含 4 个方面的内容:读取图像、显示图像、保存图像和获取图像属性。其中,常用的图像属性有 3 个:shape、size 和 dtype。本章将依次详解实现图像处理的 4 个基本操作,并分别阐明常用的 3 个图像属性各自的含义及其使用方法。

    image = cv2.imread(filename, flags)

     image:imread()方法的返回值,返回的是读取到的图像。

     filename:要读取的图像的完整文件名。例如,要读取当前项目目录下的 3.1.jpg,filename 的值为「3.1.jpg」(双引号是英文格式的)。

     flags:读取图像颜色类型的标记。当 flags 的默认值为 1 时,表示读取的是彩色图像,此时的 flags 值可以省略;当 flags 的值为 0 时,表示读取的是灰度图像(如果读取的是彩色图像,也将转换为与彩色图像对应的灰度图像)。

    说明

    灰度图像是一种每个像素都是从黑到白,被处理为 256 个灰度级别的单色图像。256 个灰度级别分别用 0(纯黑色)~255(纯白色)的数值表示。

    显示图像

    相比图 3.2 中密密麻麻的数字,如

    果能够将这幅图像显示出来,就可以更加直观地看到它。为此,OpenCV 提供了 imshow()方法、waitKey()方法和 destroyAllWindows()方法。

    cv2.imshow(winname, mat)

    保存图像

     cv2.imwrite(filename, img)

    filename:保存图像时所用的完整路径。

     img:要保存的图像。

    获取图像属性

    在处理图像的过程中,经常需要获取图像的大小、类型等图像属性。为此,OpenCV 提供了 shape、size 和 dtype 3 个常用属性,具体含义分别如下。

    shape:如果是彩色图像,那么获取的是一个包含图像的水平像素、垂直像素和通道数的数组,即(垂直像素,水平像素,通道数);如果是灰度图像,那么获取的是一个包含图像的水平像素和垂直像素的数组,即(垂直像素,水平像素)。

    size:获取的是图像包含的像素个数,其值为「水平像素 × 垂直像素 × 通道数」。灰度图像的通道数为 1。

    dtype:获取的是图像的数据类型。

    像素的操作

    像素是图像的最小单位。每一幅图像都是由MN列的像素组成的,其中每一个像素都存储一个像素值。以灰度图像为例,计算机通常把灰度图像的像素处理为 256 个灰度级别,256 个灰度级别分别使用区间[0,255]中的整数数值表示。其中,「0」表示纯黑色;「255」表示纯白色。本章将围绕着像素展开,介绍如何使用 NumPy 模块操作像素。

    确定像素的位置

     正方向 分别是 往右和往下

    读取像素

    1. import cv2
    2. image = cv2.imread(「D:/4.1.jpg」) # 读取 D 盘根目录下的 4.1.jpg
    3. px = image[291218] # 坐标(291, 218)上的像素

    获取像素的 BGR 值

    blue green red

    通常我们用的是RBG值 但是opencv中用的是反过来的 用BGR值

    所以我们平时的(0,0,255)其实是纯红色

    1. import cv2
    2. image = cv2.imread(「D:/4.1.jpg」)
    3. blue = image[2912180] # 坐标(291, 218)上的像素的 B 通道的值
    4. green = image[2912181] # 坐标(291, 218)上的像素的 G 通道的值
    5. red = image[2912182] # 坐标(291, 218)上的像素的 R 通道的值
    6. print(blue, green, red)

    修改像素的 BGR 值

    直接给像素赋值即可

    例如

     px = [255, 255, 255]
  • 相关阅读:
    知行之桥堆内存及清理
    跨平台编译QCA、安装QCA(Windows、Linux、MacOS环境下编译与安装)
    代码随想录算法训练营第五十八天 | 583. 两个字符串的删除操作 & 72. 编辑距离
    (一)硬件描述语言verilog
    【看不懂才怪系列】一套通俗的基于Pytorch的网络训练代码模板
    LeetCode 92. Reverse Linked List II【链表,头插法】中等
    ElasticSearch--优化写入速度的方法--修改配置
    LeetCode:字符串篇
    RabbitMQ--基础--02--原理
    第十节:继承【java】
  • 原文地址:https://blog.csdn.net/qq_62218542/article/details/126919532