人工智能基础-opencv-图像处理篇

一.图像预处理

图像翻转

cv2.flip 是 OpenCV 库中的一个函数,用于翻转图像。翻转可以是水平翻转、垂直翻转或同时水平和垂直翻转。这个函数接受两个参数:要翻转的图像和一个指定翻转类型的标志。

img = cv2.imread('../images/car2.png')
#翻转 0:是垂直翻转   1:是水平翻转     -1:垂直加水平翻转
f_img = cv2.flip(img,-1)

要传入的参数有两个,一个是

img:为要传入处理的图片

翻转: -1:水平和垂直 1:水平翻转,0 垂直翻转

图像仿射变换

1.图像旋转

旋转操作可以将图像绕着某个点旋转一定的角度

需要的参数:

(h,w):图像的像素,宽,高

  • center:旋转中心点的坐标,格式为 (x, y)

  • angle:旋转角度,单位为度。正角度表示逆时针旋转,负角度表示顺时针旋转。在上图变量为du

  • scale:缩放比例。如果设置为 1,则不进行缩放。

返回值

  • M:2x3 的旋转矩阵。

需要提前把参数定义好。例如:

cv2.getRotationMatrix2D 是 OpenCV 库中的一个函数,用于获取旋转矩阵。

随后把获取的旋转矩阵放入cv2.getRotationMatrix2D函数内。

矩阵为2x3 的变换矩阵,类型为 np.float32

2.图像平移

平移操作可以将图像中的每个点沿着某个方向移动一定的距离。

img = cv2.imread('../images/car.png')
(h,w) = img.shape[:2]
#定义平移水平和垂直移动的距离
ty,tx = 0,100
#创建一个平移矩阵
t_img = np.float32([[1,0,tx],[0,1,ty]])w_img = cv2.warpAffine(img,t_img,(w,h))
cv2.imshow('w_img',w_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

需要的参数为:

h,w : 图像的像素,宽和高

ty , tx:为需要平移的距离

t_img: 为一个平移矩阵 ,t_img = np.float32([[1,0,tx],[0,1,ty]])

img: 需要处理的图像

然后将参数放入cv2.warpAffine(img,t_img,(w,h)),用新图像w_img接收

3.图像缩放

缩放操作可以改变图像的大小

img = cv2.imread('../images/car.png')
#定义缩放的参数,参数大于1的时候是放大,小于1时是缩小
w1 = 0.5
h1 = 0.5
(h,w) = img.shape[:2]
print(h,w)
m = np.float32([[w1,0,0],[0,h1,0]])
t_img = cv2.warpAffine(img,m,(int(w*w1),int(h*h1)))#上面的缩放因子是float类型,全部转成int类型做运算。

需要的参数:

        w1 = 0.5

        h1  = 0.5

        定义两个缩放因子

        (h,w):图像的像素,获得像素然后与缩放因子做运算。

        m:m = np.float32([[w1,0,0],[0,h1,0]]),这个公式解释如下图。

4.图像剪切

img = cv2.imread('../images/car5.png')
(h,w) = img.shape[:2]
#定义图像剪切的参数
sx = 0.2
sy = 0.5
#定义矩形
m = np.float32([[1,sx,0],[sy,1,0]])
#图像剪切
i_img = cv2.warpAffine(img,m,(w,h))
cv2.imshow('i_img',i_img)

最后把定义的参数放入cv2.warpAffine函数内进行仿射变换。

图像色彩空间转换

        OpenCV中的色彩空间转换是将图像从一种颜色表示形式转换为另一种颜色表示形式的过程。常见的颜色空间包括RGB、HSV、YUV等。

        它可以方便我们对图像进行处理,并提高图像处理的效果和节省计算资源。

函数为:

cv2.cvtColor(src, code)
  • src:输入图像,可以是一个NumPy数组或者一个OpenCV的Mat对象。

  • code:指定转换的类型,可以使用预定义的转换代码,例如cv2.COLOR_BGR2GRAY表示从BGR到灰度图像的转换。

1.RGB 转 Gray(灰度)

将图像基础格式RGB即彩色图像,转为灰度图像

gay_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

看后面的方法参数能看出来,BGR2GRAY,在BGR和GRAY中间有个2,即是把BGR格式转换呈GRAY格式,其它格式的转换也是同理。

2.RGB 转 HSV

HSV 颜色空间将颜色分解为色调(Hue)、饱和度(Saturation)和亮度(Value)三个分量。

HSV 颜色空间在图像处理和计算机视觉中有多种应用,包括颜色分割、图像增强、颜色校正、图像分析图像压缩。

由于 HSV 颜色空间将颜色信息与亮度信息分离,因此在处理颜色相关的任务时,HSV 颜色空间通常比 RGB 颜色空间更方便和有效。

# 将图像从BGR到灰度图像的转换
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

参数为:cv2.COLOR_BGR2HSV

图像二值化处理

        图像二值化处理是将灰度图像转换为二值图像的过程,常用的方法包括全局阈值法、自适应阈值法和 Otsu 方法。二值化处理在图像处理中有很多应用,例如边缘检测、文本识别、目标检测等。通过 OpenCV 提供的函数,可以方便地实现这些二值化方法。

  cv2.threshold 是 OpenCV 中用于图像二值化的函数。它通过设置阈值将图像分为前景和背景。

retval, dst = cv2.threshold(src, thresh, maxval, type)

cv2.threshold 内的参数:

images:用于二值化的图像,图像性质为灰度。

thresh:设置的界定阈值,低于这个数的将被归为0

maxval:设置的最大阈值,通常为255.若超过界定阈值的将被赋为255.

dype:为阈值控制类型

阈值解释:阈值将像素值分为两类:高于阈值的像素设为一个值(通常是255),低于阈值的像素设为另一个值(通常是0)。

下面是常用的几个阈值控制方法:

阈值类型,常用的有:

  • cv2.THRESH_BINARY: 超过阈值的像素设为最大值,其余设为0。

  • cv2.THRESH_BINARY_INV: 超过阈值的像素设为0,其余设为最大值。

  • cv2.THRESH_TRUNC: 超过阈值的像素设为阈值,其余不变。

  • cv2.THRESH_TOZERO: 超过阈值的像素不变,其余设为0。

  • cv2.THRESH_TOZERO_INV: 超过阈值的像素设为0,其余不变。

图像掩膜

它通常用于创建掩模,以便从图像中提取特定颜色的区域。

掩膜是一个二值图像,其中白色区域(通常为 255)表示感兴趣的区域,黑色区域(通常为 0)表示不感兴趣的区域。

cv2.inRange(src, lowerb, upperb)

参数:

  • src: 输入的图像,可以是彩色图像或灰度图像。

  • lowerb: 颜色范围的下界(数组或元组),指定了要提取的颜色的最小值。

  • upperb: 颜色范围的上界(数组或元组),指定了要提取的颜色的最大值。

返回值

  • 返回一个二值图像,白色部分表示在指定颜色范围内的区域,黑色部分表示不在范围内的区域

图像检测轮廓

cv2.findContours 函数可以在二值图像中找到轮廓,并返回轮廓的点集。轮廓可以用来表示物体的边界,常用于物体检测、分割和形状分析。

contours, hierarchy = cv2.findContours(image, mode, method)

参数:

  1. image: 输入的二值图像。通常在调用该函数之前需要将图像转换为灰度图像并进行二值化处理(如使用 cv2.thresholdcv2.Canny)。

  2. mode

    : 轮廓检索模式:

    • cv2.RETR_EXTERNAL: 只检索外部轮廓。

    • cv2.RETR_LIST: 检索所有轮廓,并将其放入列表中。

    • cv2.RETR_TREE: 检索所有轮廓,并建立层级关系。

  3. method

    : 轮廓逼近方法:

    • cv2.CHAIN_APPROX_SIMPLE: 压缩轮廓,仅保留端点。

    • cv2.CHAIN_APPROX_NONE: 保留所有轮廓点。

返回值

  • contours: 一个 Python 列表,其中每个元素是一个轮廓(即一组点),轮廓的点以 NumPy 数组的形式存储。

  • hierarchy: 轮廓的层级信息,包含轮廓之间的关系。

cv2.boundingRect 函数介绍

cv2.boundingRect 是 OpenCV 中用于计算轮廓的最小外接矩形的函数。这个函数可以返回一个包含轮廓的最小矩形的边界框,通常用于对象检测、图像分割等任务中。最小外接矩形是一个完全包围轮廓的矩形,其边与图像的坐标轴平行。

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

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

相关文章

【机器学习】嘿马机器学习(科学计算库)第4篇:Matplotlib,学习目标【附代码文档】

本教程的知识点为:机器学习(常用科学计算库的使用)基础定位 机器学习概述 机器学习概述 1.5 机器学习算法分类 1 监督学习 机器学习概述 1.7 Azure机器学习模型搭建实验 Azure平台简介 Matplotlib 3.2 基础绘图功能 — 以折线图为例 1 完善原…

平衡二叉树(递归)

给定一个二叉树,判断它是否是 平衡二叉树.平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2: 输入:root [1,2,2,3,3,null,null,4…

Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)

案例背景 虽然在效果上,传统的逻辑回归模型通常不如现代的机器学习模型,但在风控领域,解释性至关重要。逻辑回归的解释性是这些“黑箱”模型所无法比拟的,因此,研究传统的评分卡模型依然是有意义的。 传统的评分卡模型…

Weblogic漏洞复现(Vulhub)

0x00前言 1.docker 安装 Docker的安装_docker安装-CSDN博客 2.docker的镜像 1.可以在阿里云上的容器服务找到镜像源。 2.也可以使用下面的镜像源,时快时慢不稳定。 {"registry-mirrors":["https://docker.registry.cyou","https://d…

【Python环境配置-Step1】PyCharm 2024最新官网下载、安装教程

背景: 1、 步骤: 1、PyCharm 官网下载地址:https://www.jetbrains.com/pycharm/ 2、查看下图红框选中,下载社区版(免费) 3、(查看下图红框选中)这里选其他版本 4、这里我下载的…

用vite创建项目

一. vite vue2 1. 全局安装 create-vite npm install -g create-vite 2. 创建项目 进入你想要创建项目的文件夹下 打开 CMD 用 JavaScript create-vite my-vue2-project --template vue 若用 TypeScript 则 create-vite my-vue2-project --template vue-ts 这里的 …

FBX福币交易所A股三大指数小幅低开 稀土永磁板块回调

查查配分析11月5日电 周二,A股三大指数小幅低开。沪指开盘跌0.10%报3306.81点,深证成指开盘跌0.09%报10653.20点,创业板指开盘跌0.05%报2184.90点。 FBX福币凭借用户友好的界面和对透明度的承诺,迅速在加密货币市场中崭露头角,成为广大用户信赖的平台。 来源:同花顺iFinD 盘面…

LeetCode总结-链表

一、遍历链表 1290.二进制链表转整数 2058.找出临界点之间的最小和最大距离 2181.合并零之间的节点 二、删除节点 问:为什么没有修改 dummy,但 dummy.next 却是新链表的头节点?如果删除了 head,那么最后返回的是不是原链表的头…

腐蚀图像分割系统:前端交互展示

腐蚀图像分割系统源码&数据集分享 [yolov8-seg-C2f-DySnakeConv&yolov8-seg-LSKNet等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al…

NIM 平台生成式 AI-demo

需要python环境 官网注册:(后续调用模型需要秘钥key)Try NVIDIA NIM APIs 可以看到有多种模型: 官方案例 1.安装相关依赖: pip install langchain_nvidia_ai_endpoints langchain-community langchain-text-splitt…

欢迎使用Markdown编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

智慧医疗:AI如何改变传统医疗服务模式?

内容概要 在如今的医疗界,智慧医疗正如一阵旋风,呼啸而来,打破了传统的模式。这一变革的核心,毫无疑问是人工智能。想象一下,一个不需要排队候诊、甚至不需要出门的医生——这就是智能助手的非凡魅力!通过…

1.kubernetes作用及组件

容器管理集群名称叫做k8s 容器的编排工具:swarm,kubesphere,open shift,kubernetes【市场占比大】 一.kubernetes介绍 1.kubernetes是什么? 由谷歌公司开源的应用,基于go语言编写 简称k8s 2.kubernet…

【AcWing】算法基础课-动态规划

目录 1、闫式DP分析法 2、背包问题 2.1 01背包问题 朴素版本 优化版本 2.2 完全背包问题 朴素版本 优化版本 2.3 多重背包问题 朴素版本 二进制优化 2.4 分组背包问题 3、线性DP 3.1 数字三角形 3.2 最长上升子序列 3.3 最长公共子序列 4、区间DP 5、数位统计…

白天用的投影仪哪款好?掌握这个亮度参数谁敢忽悠你

人们追求松弛人生的同时,也着眼于高品质的家庭娱乐体验,高端家用投影仪以其大屏幕的视觉冲击力和便捷的移动性,应运成为众多家庭客厅、卧室的新宠。而在挑选家用投影仪时,亮度作为衡量其性能的重要指标之一,直接影响着…

七牛云OSS的使用

图片上传 一、七牛云oss介绍 1.1 图片存储介绍 在实际开发中,我们会有很多处理不同功能的服务器。例如: 应用服务器:负责部署我们的应用 数据库服务器:运行我们的数据库 文件服务器:负责存储用户上传文件的服务器…

重新构想定性数据分析:使用 NVivo 15 实现 AI、反思和备忘录

NVivo 是研究出版物中引用最多的定性数据分析软件 (QDA 软件),使用 NVivo v15 最新主要版本从定性和混合方法数据中发现更多信息,融合 Lumivero AI Assistant 更快地识别主题、运行高级查询和发现基于证据的见解,让您在更短的时间内获得严谨的研究结果。…

C++【string的模拟实现】

在前文我们讲解了string类接口使用(C【string类的使用】(上),C【string类的使用】(下)),本片文章就来模拟实现string类。 注:本文实现的是string的部分重点内容,目的是为了更好的了解string&…

zabbix安装配置与使用

zabbix Zabbix的工作原理如下: 监控部分: Zabbix Agent安装在各个需要监控的主机上,它以主配置的时间间隔(默认60s)收集主机各项指标数据,如CPU占用率、内存使用情况等。 通讯部分: Agent会把收集的数据通过安全通道(默认10051端口)发送到Zabbix Server。Server会存储这些数…

7.3、实验三:RIPv2的基本配置

源文件: 7.3、实验三:RIPv2的基本配置: https://url02.ctfile.com/d/61945102-63684790-45f44b?p2707 (访问密码: 2707) 一、目的 能够使用RIPv2路由协议 二、实验要求 1.要求 使用RIPv2协议,使得PC0 和 Service0能够通信,…