学习Opencv不得不掌握的操作

news2025/1/19 2:22:50

OpenCV基本操作

 1 图像的IO操作

这里我们会给大家介绍如何读取图像,如何显示图像和如何保存图像。

1.1 读取图像

  1. API
cv.imread()

参数:

  • 要读取的图像
  • 读取方式的标志
  • cv.IMREAD*COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数。
  • cv.IMREAD*GRAYSCALE:以灰度模式加载图像
  • cv.IMREAD_UNCHANGED:包括alpha通道的加载图像模式。 可以使用1、0或者-1来替代上面三个标志

参考代码

import numpy as np
import cv2 as cv
# 以灰度图的形式读取图像
img = cv.imread('messi5.jpg',0)

注意:如果加载的路径有错误,不会报错,会返回一个None值

1.2显示图像

1 . API

cv.imshow()

参数:

  • 显示图像的窗口名称,以字符串类型表示
  • 要加载的图像

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

另外我们也可使用matplotlib对图像进行展示。

  1. 参考代码
# opencv中显示
cv.imshow('image',img)
cv.waitKey(0)
# matplotlib中展示
plt.imshow(img[:,:,::-1])

1.3 保存图像

1.API

cv.imwrite()

参数:

  • 文件名,要保存在哪里
  • 要保存的图像

2.参考代码

cv.imwrite('messigray.png',img)

2 绘制几何图形

2.1 绘制直线

cv.line(img,start,end,color,thickness)

参数:

  • img:要绘制直线的图像
  • Start,end: 直线的起点和终点
  • color: 线条的颜色
  • Thickness: 线条宽度

2.2 绘制圆形

cv.circle(img,centerpoint, r, color, thickness)

参数:

  • img:要绘制圆形的图像
  • Centerpoint, r: 圆心和半径
  • color: 线条的颜色
  • Thickness: 线条宽度,为-1时生成闭合图案并填充颜色

2.3 绘制矩形

cv.rectangle(img,leftupper,rightdown,color,thickness)

参数:

  • img:要绘制矩形的图像
  • Leftupper, rightdown: 矩形的左上角和右下角坐标
  • color: 线条的颜色
  • Thickness: 线条宽度

2.4 向图像中添加文字

cv.putText(img,text,station, font, fontsize,color,thickness,cv.LINE_AA)

参数:

  • img: 图像
  • text:要写入的文本数据
  • station:文本的放置位置
  • font:字体
  • Fontsize :字体大小

2.5 效果展示

我们生成一个全黑的图像,然后在里面绘制图像并添加文字

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1 创建一个空白的图像
img = np.zeros((512,512,3), np.uint8)
# 2 绘制图形
cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv.circle(img,(447,63), 63, (0,0,255), -1)
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
# 3 图像展示
plt.imshow(img[:,:,::-1])
plt.title('匹配结果'), plt.xticks([]), plt.yticks([])
plt.show()

结果:

 

3 获取并修改图像中的像素点

我们可以通过行和列的坐标值获取该像素点的像素值。对于BGR图像,它返回一个蓝,绿,红值的数组。对于灰度图像,仅返回相应的强度值。使用相同的方法对像素值进行修改。

import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg')
# 获取某个像素点的值
px = img[100,100]
# 仅获取蓝色通道的强度值
blue = img[100,100,0]
# 修改某个位置的像素值
img[100,100] = [255,255,255]

4 获取图像的属性

图像属性包括行数,列数和通道数,图像数据类型,像素数等。

5 图像通道的拆分与合并

有时需要在B,G,R通道图像上单独工作。在这种情况下,需要将BGR图像分割为单个通道。或者在其他情况下,可能需要将这些单独的通道合并到BGR图像。你可以通过以下方式完成。

# 通道拆分
b,g,r = cv.split(img)
# 通道合并
img = cv.merge((b,g,r))

6 色彩空间的改变

OpenCV中有150多种颜色空间转换方法。最广泛使用的转换方法有两种,BGR↔Gray和BGR↔HSV。

API:

cv.cvtColor(input_image,flag)

参数:

  • input_image: 进行颜色空间转换的图像
  • flag: 转换类型
  • cv.COLOR_BGR2GRAY : BGR↔Gray
  • cv.COLOR_BGR2HSV: BGR→HSV


总结:

  1. 图像IO操作的API: cv.imread(): 读取图像 cv.imshow():显示图像 cv.imwrite(): 保存图像
  2. 在图像上绘制几何图像 cv.line(): 绘制直线 cv.circle(): 绘制圆形 cv.rectangle(): 绘制矩形 cv.putText(): 在图像上添加文字
  3. 直接使用行列索引获取图像中的像素并进行修改
  4. 图像的属性

  1. 拆分通道:cv.split() 通道合并:cv.merge()
  2. 色彩空间的改变 cv.cvtColor(input_image,flag)
     

轻松玩转OpenCV图像处理。10小时学会opencv, 带您领略朴素图像处理的魅力风采 :

1. 了解什么是opencv及其安装

2. 了解opencv的架构

3. 掌握opencv进行图像的IO操作

4. 掌握opencv的图像处理方法

5. 掌握opencv的特征提取与描述方法

6. 使用opencv进行人脸识别

人工智能教程_10小时学会图像处理OpenCV入门教程_哔哩哔哩_bilibili黑马程序员人工智能教程_10小时学会图像处理OpenCV入门教程共计67条视频,包括:01.课程介绍、02.1.1 图像处理简介、03.1.2opencv简介及其安装方法等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1Fo4y1d7JL/?spm_id_from=333.999.0.0

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ Primer笔记——explicit、string流、vector比较、emplace

目录 一.P265 抑制构造函数定义的隐式转换 二.P287 string流 三.P304 vector的比较 四.P307 在容器中特定位置添加元素 一.P265 抑制构造函数定义的隐式转换 举个例子,如果构造函数参数是string类型,那么当使用赋值符号进行初始化操作时&#xff0c…

leetcode -- ⽤最少数量的箭引爆⽓球(452)

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一…

数据模型篇之阿里巴巴数据整合及管理体系

第9章 阿里巴巴整合及管理体系 OneData的设计是为了建设统一的、规范化的数据接人层( ODS )和数据中间层( DWD和DWS ),通过数据服务和数据产品,完成服务于阿里巴巴的大数据系统建设 ,即数据公共…

2022 年 11 月区块链操作系统的开发回顾

查看 Cartesi Machine、Cartesi Rollups 和 Noether 的更新正在寻找区块链操作系统组件的最新进展?你找对地方了!正如在我们的路线图文章中所描述的那样,我们一直在朝着定期且频繁的更新方向发展着,以便让我们的社区能够及时的了解…

微服务框架 SpringCloud微服务架构 多级缓存 46 JVM 进程缓存 46.1 导入商品案例【MySQL环境准备】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存46 JVM 进程缓存46.1 导入商品案例【MySQL环境准备】46.1.1 导入商品管理案例46 JVM 进程缓存 用于在T…

新冠疫情下免疫的重要性以及肠道菌群在其中的作用

今年是新冠病毒影响的第三年了,在病毒的影响下,我们的生活方式发生了很大的变化。近日,多地政府颁布了疫情防控的新政策,除了一些特殊场所,出入其他场所不用扫场所码了。 从一方面说,这样的情况方便了我们日…

DAP数据分析平台可视化组件开发

企业信息化建设会越来越完善,越来越体系化,当今数据时代背景下更加强调、重视数据的价值,以数据说话,通过数据为企业提升渠道转化率、改善企业产品、实现精准运营、有效运营,用数据来指引企业的发展。 组件使用是在DA…

第一章:Pytorch简介和其三大核心概念

文章目录一:什么是Pytorch二:Pytorch优势三:Pytorch三大核心概念(1)tensor(张量)(2)autograd(自动微分-变量)(3)nn.Module…

java计算机毕业设计基于安卓Android的校园安保巡查系统APP

项目介绍 校园安保巡查系统APP管理是校园安保巡查系统管理中对学生必不可少的一个部分。在人们校园安保巡查系统管理的整个过程中,校园安保巡查系统APP管理担负着最重要的角色。为满足如今日益复杂的管理需求,各类校园安保巡查系统APP管理程序也在不断改进。本课题所设计的校园…

精华推荐 |【Redis技术探索】「底层架构原理」帮你彻底搞定Sentinel的实现原理运作机制

👮‍每日一句 最美好的生活方式是和一群志同道合的人,一起奔跑在理想的路上,回头有一路的故事,低头有坚定的脚步,抬头有清晰的远方! 👮‍ Sentinel存在的意义 👮‍ Sentinel出现的前…

如何快速传输大文件,介绍大文件快速方法

现在,企业比以往任何时候都面临着一个重大挑战:需要一个快速共享文件的解决方案。但是,并非所有快速文件传输解决方案都以相同的速度传输文件。文件大小、端点位置、路径、设备、防火墙、网络系统和加密需求都会限制文件的传输速度。 什么是快…

[附源码]Python计算机毕业设计个人相册管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Java中的String类

一、String类的体系图 简单解释:1、String类实现了Serializable接口,说明String类可以串行化,可以进行网络传输。2、String类实现了Comparable接口,说明String对象可以进行比较。 二、String类介绍 String类是lang包中的类&…

【LeetCode每日一题】——337.打家劫舍 III

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 树 二【题目难度】 中等 三【题目编号】 337.打家劫舍 III 四【题目描述】 小偷又发现了一个…

数据指标体系的建设思考(三)

一、数据指标体系搭建流程 01、如何搭建数据指标体系 ▶ “德勤”的数据指标体系方法论 首先,我们先来学习一下优秀的数据指标体系搭建方法论。数据指标体系搭建方法论有不少优秀的方案,大部分都大同小异,在这里我们来聊一下“德勤”推荐的…

论文投稿指南——中国(中文EI)期刊推荐(第7期)

🎄🎄 EI是国际知名三大检索系统之一,在学术界的知名度和认可度仅次于SCI! 【前言】 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊。其中,中文期刊的…

Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作

目录 1--开操作 2--闭操作 3--基本梯度计算 4--顶帽操作 5--黑帽操作 6--代码实例 1--开操作 ① 原理:先进行腐蚀操作,再进行膨胀操作; ② 作用:消除值高于邻近点的孤立点,达到去除图像中噪声的作用&#xff0…

Python零基础入门篇- Python的加密模块 - hashlib 与 base64

我们来学习一下 Python 中的加密模块,加密模块在工作中被广泛应用。比如数据的传入 不希望被捕获,通过把数据加密。这样即使被捕获也无法获取到数据的真实信息,今天我们就来学习一下关于加密的方法。 hashlib 模块 hashlib 模块的介绍 hashl…

SSH远程免密登录的两种方式

SSH远程免密登录的两种方式一、ssh远程登录操作1.先ping测试下看看网络是否通畅2.ssh 192.168.150.148二、ssh免密登录方式一1.生成公钥、私钥2.拷贝公钥到目标服务器3.测试ssh免密登录三、ssh免密登录方式二1.生成本机的公钥私钥2.打开本地公钥文件复制公钥信息3.将公钥存放到…

[虚幻引擎] UE4/5数字孪生 制作城市光束效果

一、模型导入 二、创建材质 创建材质曲线,为了能够更好的实现颜色的渐变过程,这里用了RGB三种颜色 三、创建蓝图BP_LightBeam 在构造函数中实现逻辑首先我们的思路是要制作数量不同的光束那么我们就要循环,循环的次数可根据你想要的数量来设…