一、概述

        1、简单介绍

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

        2、OpenCV的主要特点:

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

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

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

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

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

        3、环境安装

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

pip install opencv-python

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

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[,读取方式])

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

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

示例:

        2、保存图像

                cv2.imwrite(path, img)

cv2.imwrite('../data/f_cat_4.jpg',img)

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

        3、创建黑白图像

                3.1 全黑图像:

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

numpy.zeros((height,width,channels),dtype=np. uint8)

                3.2 全白图像:

np.full((h, w, c),fill_value,dtype = np.uint8)

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

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

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中, 图像的裁切其实就是对图像的数组形式进行切片,用于从图像中提取一个                   子区域(矩形区域)

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

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库中用于调整图像大小的函数,在图像处理中很常用,特别是在                      要对图像进行缩放以适应不同需求时

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()

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

示例:

        2、绘制矩形 

                cv2.rectangle()

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

 示例:

         3、绘制圆形

                cv2.circle()

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

示例:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916361.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916361.shtml
英文地址,请注明出处:http://en.pswp.cn/news/916361.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

去中心化时代的通信革命:briefing与cpolar技术融合带来的安全范式革新

文章目录前言1.关于briefing2.本地部署briefing3.使用briefing4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定briefing公网地址前言 数字协作本该是提升效率的过程,却被这些数据管理问题不断困扰:平台条款中的监控声明、跨网络环境的接入障碍、…

GitHub新手生存指南:AI项目版本控制与协作实战

点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 代码仓库创建 分支管理 PR提交 开源项目复现 读者收获:掌握团队开发必备技能…

Axios封装以及添加拦截器

在前端开发中,http请求层的封装可以极大提升代码的复用性和可维护性,本文将完整的用axios封装接口请求,配置请求与响应拦截器,封装统一的请求方法全过程。封装的目的和思路在项目直接用axios发送请求当然没问题,但是如…

C语言中奇技淫巧04-仅对指定函数启用编译优化

相信很多人使用GCC编译代码时,都会接触到gcc -O0/1/2/3/s,知道它可以对工程进行全局优化。 事实上,除了全局优化外,使用GCC扩展方式,我们还可以仅对部分关键函数实施差异化编译优化。 在GCC编译器中,attrib…

HTML Style 对象深度解析:从基础到高级应用

一、Style 对象的核心概念定义与作用 Style 对象是 HTML DOM 中用于操作元素内联样式的接口,通过 element.style 访问。它允许动态修改元素的 CSS 属性,但仅能直接影响内联样式(即通过 style 属性直接写在标签中的样式)。与外部样…

【C++】定义常量

在 C 中&#xff0c;有两种简单的定义常量的方式&#xff1a; 使用 #define 预处理器。使用 const 关键字。 #define 预处理器 #include <iostream> using namespace std;#define LENGTH 10 #define WIDTH 5 #define NEWLINE \nint main() {int area; area LENGTH …

基于遗传算法的多无人车协同侦察与安全保护策略优化

基于遗传算法的多无人车协同侦察与安全保护策略优化 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 1. 引言 1.1 研究背景与意义 随着无人系统技术的快速发…

python面向对象编程详解

面向对象编程&#xff08;OOP&#xff09;是一种以对象为核心的编程范式。Python全面支持OOP&#xff0c;主要包含以下核心概念&#xff1a;一、类与对象1.类(Class)类是创建对象的模板或蓝图&#xff0c;它定义了对象的属性和方法。class Dog:# 类属性&#xff08;所有实例共享…

快速入门Socket编程——封装一套便捷的Socket编程——导论

快速入门Socket编程——封装一套便捷的Socket编程——导论 前言 ​ 这里是笔者打算做的Socket编程的第二部分&#xff0c;也就是核心的讨论我们Socket编程本身。 导论 ​ 我们知道&#xff0c;一个经典的服务器套接字的处理流程是如下的&#xff1a; 创建一个指定传输层和网络层…

【Mermaid 离线工具】Mermaid 流程图生成器 - 高清PNG输出,一键生成专业级流程图!

文章目录 Mermaid 流程图生成器(离线版本):高效绘图,离线也能玩转专业可视化 一、Mermaid:文本绘图的 “魔法语法” 二、离线版生成器:功能与优势解析 (一)离线可用,场景更灵活 (二)操作流程:简单五步,产出专业图表 (三)界面设计:简洁直观,降低使用门槛 三、应…

haproxy原理及实战部署

一、负载均衡 负载均衡是网络架构和分布式系统中至关重要的技术&#xff0c;其核心作用是将大量的并发请求或数据流量合理分配到多个服务器&#xff08;或其他资源节点&#xff09;上&#xff0c;从而解决单节点压力过大、资源利用率低、系统稳定性差等问题。 作用1. 提高系统吞…

jwt 在net9.0中做身份认证

一、新建net9.0项目WebApplication1&#xff0c;安装包 <ItemGroup><PackageReference Include"Microsoft.AspNetCore.Authentication.JwtBearer" Version"9.0.7" /><PackageReference Include"Swashbuckle.AspNetCore" Version&…

【机器学习深度学习】微调能改变模型“智商”吗?——模型能力与知识的本质解析

目录 前言 一、模型的“知识”与“能力”&#xff1a;两种不同的智能 第一种&#xff1a;浅层知识&#xff08;记忆 模式识别&#xff09; 第二种&#xff1a;深层能力&#xff08;推理 理解&#xff09; 二、微调&#xff1a;改变的是“经历”&#xff0c;不是“天赋”…

oracle数据库表空间碎片整理

oracle数据库表空间碎片整理 表空间碎片情况检查 表空间碎片问题处理 收缩表 表空间手动整理 exp/imp导出再导入 移动表到新的表空间 表空间碎片情况检查 对比表实际使用空间和数据文件占用空间: --实际数据占用空间 select tablespace_name,round(sum(bytes/1024/1024/1024…

为什么需要可重入锁

在黑马点评项目实战中&#xff0c;提到了可重入锁&#xff0c;然后我想到了是不是不同业务在同一线程内反复获取同一把锁。本文来讨论一下为什么锁需要可重入。一、可重入锁的核心&#xff1a;“同一线程多次获取同一把锁”​​可重入&#xff08;Reentrant&#xff09;​​ 的…

【AI】联网模式

【AI】联网模式 文章目录【AI】联网模式1. 简介2. 接入步骤2.1 引入依赖2.2 方法构建2.3 接口构建1. 简介 在使用联网模式之前&#xff0c;我们如果问起ai一些最近网络上流传的一些东西&#xff0c;它可能并不能准确的给你描述出来&#xff0c;因为它的知识库更新时间可能停留…

第10篇:实战验收篇

&#x1f50d; 实战演练&#xff1a;多条件房源查询 需求描述 查找一套符合以下条件的房子&#xff1a; 预算&#xff1a;2000–3000元区域&#xff1a;天河区户型&#xff1a;两房 关键词&#xff1a;多条件查询 AND BETWEEN LIKE 组合运用&#x1f3ac; 开场白“听起来不难&a…

深入解析YARN中的FairScheduler与CapacityScheduler:资源分配策略的核心区别

YARN资源调度器概述在Hadoop生态系统中&#xff0c;YARN&#xff08;Yet Another Resource Negotiator&#xff09;作为核心资源管理平台&#xff0c;其架构设计将计算资源管理与作业调度解耦&#xff0c;形成了"全局资源管理器&#xff08;ResourceManager&#xff09;节…

基于Seata的微服务分布式事务实战经验分享

基于Seata的微服务分布式事务实战经验分享 1. 业务场景描述 在电商系统中&#xff0c;用户下单会涉及多个微服务&#xff1a;订单服务&#xff08;Order Service&#xff09;、库存服务&#xff08;Inventory Service&#xff09;、账户服务&#xff08;Account Service&#x…

Linux库——库的制作和原理(2)_库的原理

文章目录库的原理理解目标文件ELF文件读取ELF的工具——readelfELF从形成到加载的轮廓ELF形成可执行文件ELF可执行的加载理解链接与加载静态链接ELF加载和进程地址空间虚拟地址 & 逻辑地址重新理解进程地址空间动态链接和动态库的加载进程如何找到动态库多个进程之间如何共…