人工智能基础-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.rhkb.cn/news/462262.html

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

相关文章

Hive学习笔记

1 Hive基本概念 1.1 Hive定义 Hive:由 Facebook 开源用于解决海量结构化日志的数据统计工具。 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并 提供类 SQL 查询功能。 利用MapReduce去查询数据文件中的某些内…

用图说明 CPU、MCU、MPU、SoC 的区别

CPU CPU 负责执行构成计算机程序的指令,执行这些指令所指定的算术、逻辑、控制和输入/输出(I/O)操作。 MCU (microcontroller unit) 不同的 MCU 架构如下,注意这里的 MPU 表示 memory protection unit MPU (microprocessor un…

HTML 语法规范——代码注释、缩进与格式、标签与属性、字符编码等

文章目录 一、代码注释1.1 使用注释的主要目的1.2 使用建议二、标签的使用2.1 开始标签和结束标签2.2 自闭合标签2.3 标签的嵌套2.4 标签的有效性三、属性四、缩进与格式4.1 一致的缩进4.2 元素单独占用一行4.3 嵌套元素的缩进4.4 避免冗长的行五、字符编码六、小结在开发 HTML…

虚拟现实与增强现实:重塑娱乐和教育的边界!

内容概要 在这个瞬息万变的时代,虚拟现实(VR)和增强现实(AR)正如两位魔法师,腾云驾雾间掀起了一场教育与娱乐的革命。虚拟现实带我们飞跃平凡,进入一个充满奇迹的数字宇宙,仿佛我们…

中仕公考:上海市25年公务员考试今日报名

2025年上海市公务员考试于今日开始报名 考试报名采取网络报名方式进行,报考者可在2024年11月2日0:00至11月8日12:00期间登录专题网站进行报名。 年龄在18周岁以上,35周岁以下(1988年11月至2006年11月期间出生),应届硕士、博士研究生报考的&…

Diving into the STM32 HAL-----HAL_GPIO

1、怎么看待外设: 从总线连接的角度看,外设和Core、DMA通过总线交换数据,正所谓要想富先修路。要注意,这些总线中的每一个都连接到不同的时钟源,这些时钟源决定了连接到该总线的外设操作的最大速度。 从内存分配的角度…

【表格解决问题】EXCEL行数过多,WPS如何按逐行分别打印多个纸张中

1 问题描述 如图:我的表格行数太多了。打印在一张纸上有点不太好看 2 解决方式 Step01:先选中你需要打印的部分,找到【页面】->【打印区域】->【设置打印区域】 Step02:先选中一行,找到【插入分页符】 Step0…

提升安全上网体验:Windows 11 启用 DOH(阿里公共DNS)

文章目录 阿里公共 DNS 介绍免费开通云解析 DNS 服务Windows 编辑 DNS 设置配置 IPv4配置 IPv6 路由器配置 DNS 阿里公共 DNS 介绍 https://alidns.com/ 免费开通云解析 DNS 服务 https://dnsnext.console.aliyun.com/pubDNS 开通服务后,获取 DOH 模板&#xff0…

如何在Linux下部署自己的ZFile开源网盘

ZFile 项目介绍 ZFile是一个功能强大、灵活的开源网盘系统,为用户提供安全便捷的文件存储和共享方案。 项目概述 ZFile由ZFile, Inc.开发和维护,基于Docusaurus构建。其用户友好的界面支持多种文件存储和共享功能,并具备高度的可定制性和扩…

Spring AI : 让ChatGPT成为你构建应用的核心亮点

本文是一篇介绍spring ai的文章,主要介绍了生成文本内容,以及读取图片中内容两个能力。 之所以介绍这两个能力,是因为 大模型目前最适合做的事情有两个: 1) 非结构化数据的结构化(图片转文字,…

Windows 命令提示符(cmd)中输入 mysql 并收到错误消息“MySQL不是内部或外部命令,也不是可运行的程序或批处理文件?

目录 背景: 过程: 1.找到MySQL安装的路径 2.编辑环境变量 3.打开cmd,输入mysql --version测试成功 总结: 背景: 很早之前安装了Mysql数据库,想查询一下当前安装的MySQL客户端的版本号,我在命令行界面输入mysql --verion命令回…

履带式排爆演习训练机器人技术详解

履带式排爆演习训练机器人是现代反恐、救援及危险环境处理领域中的重要工具。它们结合了先进的机械设计、智能感知、精确控制及高效算法,能够在复杂、危险的环境中执行排爆、侦察、取样等多种高风险任务,极大地保障了人员安全。 技术特点 1. 卓越的地面…

基于SSM医院门诊互联电子病历管理系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,医生管理,项目分类管理,项目信息管理,预约信息管理,检查信息管理,系统管理 用户账号功能包括:系统首页&…

PVE定时开启关闭虚拟机,实现PVE中群晖虚拟机的定时开机和关闭

如果在PVE中安装了群晖,又不想每天关闭PVE(不在家,怕服务器起不来),因此想每天定时关闭开启黑群晖和其他虚拟机释放资源。 在网上查了很多,说在crontab添加命令 00 2 * * * pvesh create /nodes/pve/qemu/102/status/stop 00 6 …

【数据结构】宜宾大学-计院-实验六

实验 6 栈和队列(综合实验) 实验目的:实验内容:进制转换问题:第1题测试结果:第1题代码实现: 括号匹配问题:第2题测试结果:第2题代码实现: 回文字符串问题&…

java并发编程-CAS详解

一定要看这个链接的视频,讲解十分清楚!!! 【【Java并发】面试官问我CAS、乐观锁、悲观锁,我反手就是骑脸输出】 https://www.bilibili.com/video/BV1ff4y1q7we/?share_sourcecopy_web&vd_sourceafbacdc02063c57e7…

【C/C++】qsort函数的学习与使用

零.导言 在之前的文章中,我介绍了冒泡排序,即按ASCII码值把元素从小到大排序(文章链接我放在了第五部分,有兴趣的小伙伴可以求看看)。而今天我将继续介绍qsort函数,这个函数可以起到和冒泡排序一样的作用&a…

华为实时视频使用FLV播放RTSP流

import flvjs from ‘flv.js’; 安装flv <video style"width:100%;height:100%;" ref"videoHWRef" ></video>// src 华为rtsp流 rtsp://admin:Huaweivideo10.10.8.151:554/xxx/trackID1// url 需要后端提供视频源地址playVideo() {if (fl…

【STM32】通过 DWT 实现毫秒级延时

目录 零、前言一、DWT1、DEMCR2、DWT_CTRL3、DWT_CYCCNT 二、实现代码三、测试 零、前言 在 FreeRTOS 中&#xff0c;SysTick 被用于作为调度器的一部分进行任务调度&#xff0c;那么如果我需要使用软件模拟通信&#xff0c;例如软件 I2C&#xff0c;需要使用 delay&#xff0…

如何在Linux系统中使用Ansible进行自动化部署

如何在Linux系统中使用Ansible进行自动化部署 Ansible简介 安装Ansible 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动Ansible服务 Ansible基本概念 Inventory Playbook Module 配置Ansible 测试Ansible配置 执行Ansible Playbook Ansible模块 文件模块 包管理模块…