python opencv2

二、图像预处理

 1、图像翻转 

        cv2.flip(src, flipCode) :flipCode :0:沿 X 轴翻转(垂直翻转);1:沿 Y 轴翻转(水平翻转),-1:沿 X 轴和 Y 轴翻转(同时水平和垂直翻转)。

2、仿射变换

        一种线性变换,它保持了点之间的相对距离不变,即平行线在变换后仍然保持平行。

img = cv2.imread("images/car2.png")

# 当前面 0 垂直翻转,1水平翻转,-1 水平锤子翻转
f0_img = cv2.flip(img, 0)
f1_img = cv2.flip(img, 1)
f2_img = cv2.flip(img, -1)
cv2.imshow("old", img)
cv2.imshow("new0", f0_img)
cv2.imshow("new1", f1_img)
cv2.imshow("new2", f2_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.1、图像旋转

        cv2.getRotationMatrix2D(center, angle, 1) ,设置旋转矩阵(参数1确定中心点,参数2为变化角度,参数3是图片缩放比例)

        cv2.warpAffine(image, M, (w, h)) ,设置图片使用特定方式进行旋转(参数2为旋转矩阵,参数3为图片尺寸)

        使用 (h, w) = image.shape[:2] 获取图片尺寸。

img = cv2.imread("images/car.png")
# 获取图片像素
(h, w) = img.shape[:2]
# 获取旋转的点
center = (100, 120)
# 获取度数
du = 30
# 获取图像矩阵 参数一为旋转中心点,参数二旋转度数,参数三为缩放比例
m = cv2.getRotationMatrix2D(center, du, 1)
# 图片旋转
w_img = cv2.warpAffine(img, m, (w, h))
cv2.imshow("img", img)
cv2.imshow("w_img", w_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2、图像平移

        np.float32([[1, 0, tx], [0, 1, ty]]) ;使用numpy库的float32创建一个平移矩阵。在使用 cv2.warpAffine 函数处理。

        将旋转矩阵参数变更平移矩阵。

img = cv2.imread("images/car.png")
# 获取图片像素
(h, w) = img.shape[:2]
# 获取旋转的点
center = (100, 120)
# 创建平移矩阵
tx, ty = 100, 50
# np.float32([[1, 0, tx], [0, 1, 0]])
# 参数为 [1, 0, tx] 分别表示 x轴保持原本比例,y轴不旋转(也就是原点和右下角点位于同一个x点位), tx 表示x移动位置
# 参数为 [0, 1, 0] 分别表示 x轴不旋转,y轴保持原本比列, ty 表示y移动位置
t = np.float32([[1, 0, tx], [0, 1, ty]])
# 图片旋转
w_img = cv2.warpAffine(img, t, (w, h))
cv2.imshow("img", img)
cv2.imshow("w_img", w_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.3、图像缩放

        与平移一致,变更参数。

# 参数为 [1, 0, tx] 分别表示 x轴保持原本比例,y轴不旋转(也就是原点和右下角点位于同一个x点位), tx 表示x移动位置
# 参数为 [0, 1, ty] 分别表示 x轴不旋转,y轴保持原本比列, ty 表示y移动位置np.float32([[1.5, 0, 1], [0, 1.5, 0]])

 2.4、图像变形

         与平移一致,变更参数。

# 参数为 [1, 0, tx] 分别表示 x轴保持原本比例,y轴不旋转(也就是原点和右下角点位于同一个x点位), tx 表示x移动位置
# 参数为 [0, 1, ty] 分别表示 x轴不旋转,y轴保持原本比列, ty 表示y移动位置np.float32([[1, 0.2, 1], [0.2, 1, 0]])

 3、图像色彩空间转换

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

        cv2.cvtColor(src, code):code 为cv2下的指定名称,一般是为A2B,从A形式转移到B形式。

3.1、BGR 转 HSV

        code =  cv2.COLOR_BGR2HSV

img = cv2.imread("images/car.png")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.imshow("img", img)
cv2.imshow("gav_img", hsv_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.2、BGR 转 GRAY

        code =  cv2.COLOR_BGR2GRAY

img = cv2.imread("images/car.png")
gay_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("img", img)
cv2.imshow("gav_img", gay_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.3、HSV、GRAY转BGR

        code =  cv2.COLOR_GRAY2BGR

        code =  cv2.COLOR_HSV2BGR

4、图像二值化处理

        通过阈值将图像分为两层(前景与背景).

        cv2.threshold(src, thresh, maxval, type) : thresh :设定阈值,决定分割界限;maxval:像素值超过阈值时,赋予的最大值(一般设置255);

type:阈值复制类型:

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

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

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

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

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

threshold 返回值:

          retval: 实际使用的阈值(可能与输入值不同)

          dst: 输出的二值图像

img = cv2.imread("images/car.png")
ret, dst = cv2.threshold(img, 196, 255, cv2.THRESH_BINARY)
cv2.imshow("img", img)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

5、图像掩模

         常用于从图像中提取特定颜色的区域

        cv2.inRange(src, lowerb, upperb):lowerb: 颜色范围的下界(数组或元组),指定了要提取的颜色的最小值;upperb: 颜色范围的上界(数组或元组),指定了要提取的颜色的最大值。

        一般使用HSV形式图像,返回一个二值图像,白色部分表示在指定颜色范围内的区域,黑色部分表示不在范围内的区域。

img = cv2.imread("images/car.png")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 确定蓝色区域
mask = cv2.inRange(hsv_img, np.array([100, 100, 100]), np.array([140, 255, 255]))
cv2.imshow("img", img)
cv2.imshow("mask", mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

6、图像检测轮廓

        contours, hierarchy = cv2.findContours(image, mode, method):image需要为二值图像;mode 为轮廓检索方式;method 为轮廓逼近方法。

mode:

cv2.RETR_EXTERNAL: 只检索外部轮廓

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

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

method:

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

cv2.CHAIN_APPROX_NONE: 保留所有轮廓点

返回值

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

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

img = cv2.imread("images/car.png")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_img, np.array([100, 100, 100]), np.array([140, 255, 255]))
contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
    x, y, w, h = cv2.boundingRect(c)

    # 根据轮廓信息在原图片上画矩形
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow("img", img)
cv2.imshow("mask", mask)
cv2.waitKey(0)
cv2.destroyAllWindows()

7、图像位与操作

        用于对两个图像进行按位与操作,像素均为255,则输出255,否则输出0。

        cv2.bitwise_and(src1, src2, mask=None),mask: 可选参数,用于指定一个掩模。

img = cv2.imread("images/car.png")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_img, np.array([100, 100, 100]), np.array([140, 255, 255]))
bst = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow("img", img)
cv2.imshow("bst", bst)
cv2.waitKey(0)
cv2.destroyAllWindows()

8、文字识别

        import paddlehub as hub

        ocr = hub.Module(name="chinese_ocr_db_crnn_server")

        results = ocr.recognize_text(images=[img])

results 是一个列表与字典多层嵌套的结果。

img = cv2.imread("images/wenzi01.jpeg")
ocr = hub.Module(name="chinese_ocr_db_crnn_server")
results = ocr.recognize_text(images=[img])
print(results[0]['data'][0]['text']) # 遗憾的事情太多(识别一行)

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

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

相关文章

文件夹0字节:原因、恢复方案与预防措施

一、文件夹0字节现象描述 在日常使用电脑的过程中,我们可能会遇到这样一个问题:某个文件夹突然变成了0字节,这意味着该文件夹中的所有文件似乎都不见了,但实际上可能并未被彻底删除。文件夹0字节的情况常常让人困惑不解&#xff…

不需要复制粘贴,重复内容如何使用Mac快速完成输入

在Mac的日常使用中,必然有着重复内容需要重复输入的需求,但是Mac的剪切板又不具备历史记录的功能,所以只能一次次的复制粘贴,费时费力,那么该如何才能不这么麻烦 快捷短语就是为了解决这一问题而存在的 提前在设置好…

Java 打印流:PrintStream 与 PrintWriter 详解

在 Java 编程中,System.out.println() 的使用频率恐怕不亚于 main 方法的使用频率。其中,System.out 返回的正是打印流 PrintStream。除此之外,Java 还提供了另一个打印流 PrintWriter,它们分别继承自 OutputStream 和 Writer&…

RESTful风格

目录 一、什么是RESTful 1.1 RESTFul对WEB服务接口的规定包括: 1.2 REST对请求方式的具体约束如下: 1.3 REST对URL的具体约束如下: 1.4 RESTFul的核心概念: 二、RESTful风格与传统方式对比 三、RESTful风格演示 3.1 查询所…

运维工具之docker入门

1.容器与docker 1.什么是容器? 容器是一种轻量级的,可移植的软件运行环境。它将软件程序本身及软件依赖库打包在一起。可以在不同平台和系统上运行。 2.什么是LXC LXC就是Linux container,。LXC是一种虚拟化技术,可以在操作系统层级上为应…

Ubuntu系统安装NVIDIA驱动、CUDA、PyTorch等GPU深度学习环境

学习目标: 在Ubuntu系统上安装CUDA、PyTorch等GPU深度学习环境,主要目标是为深入研究深度学习和深度强化学习提供高效的计算支持。通过构建GPU环境,计划掌握深度学习的基本概念和算法应用,提高模型训练效率,特别是在复…

地理信息科学专业想搞GIS开发:学前端还是后端?

地理信息科学专业的同学是学前端开发比较好呢还是学后端开发比较好呢? 部分网友:学前端更好 主修前端更好,因为地信学后端,是卷不赢学计算机的 本科卷前端,硕士阶段可以卷后端 甚至有网友直呼,地信根本没有…

软件测试学习笔记丨Flask框架-请求与响应

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/23408 请求方法 from flask import Flaskapp Flask(__name__)app.route("/cases", methods["get"]) def get_case():return {"code": 0, "msg": &…

你敢想象吗?我能远程控制家里的电脑进入Bios

老家的爸妈用电脑也不知怎的,偶尔就不行了。这个偶尔还挺频繁的,我自己又会修电脑,但奈何距离太远!如果叫别人上门修电脑,一次就是200…… 我的心在滴血啊在滴血~如果有这么一款产品,就算电脑无…

基于STM32的温湿度监测器教学

引言 随着科技的发展,温湿度监测在农业、仓储、环境监测等领域的应用越来越广泛。本文将指导您如何基于STM32开发一个简单的温湿度监测器,使用常用的DHT11或DHT22传感器进行数据采集,并将监测结果显示在LCD或OLED屏幕上。 项目名称 STM32温湿…

科研绘图系列:R语言组合堆积图(stacked plot)

文章目录 介绍加载R包数据数据预处理画图1画图2组合图形系统信息介绍 堆积图(Stacked Chart),也称为堆叠图,是一种常用的数据可视化图表,主要用于展示不同类别的数据量在总体中的分布情况。堆积图可以是柱状图、条形图或面积图的形式,其中各个类别的数据量被叠加在一起,…

红黑树的平衡之舞:数据结构中的优雅艺术

文章目录 前言🚀一、红黑树的介绍1.1 红黑树的概念1.2 红黑树的特点1.3 红黑树的性质 🚀二、红黑树结点的定义🚀三、红黑树的框架🚀四、旋转操作🚀五、红黑树的插入操作5.1 uncle结点存在且为红5.2 uncle结点不存在或者…

ONLYOFFICE 8.2版本产品评测——遥遥领先,助力自动化办公

ONLYOFFICE 产品测试体验报告总结 知孤云出岫-CSDN博客 目录 产品介绍——篇【1】 一.关于 ONLYOFFICE 桌面编辑器 二.关于 ONLYOFFICE 协作空间 三.关于 ONLYOFFICE 文档 四.关于 ONLYOFFICE的版本介绍 产品新功能——篇【2】 一.关于 ONLYOFFICE的新增功能介绍 二.ONL…

【Linux驱动开发】通过设备树节点来配置和调用GPIO(pinctrl节点和gpio-controller)

【Linux驱动开发】通过设备树节点来配置和调用GPIO(pinctrl节点和gpio-controller) 文章目录 设备树下pinctrl节点GPIO控制节点调用方法GPIO输入附录:嵌入式Linux驱动开发基本步骤开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动…

【Linux】安装 SQL Server 命令行工具 mssql-tools18(Ubuntu 22.04)

引言 mssql-tools18 是一个包含 Microsoft SQL Server 命令行工具的软件包。这些工具包括 sqlcmd 和 bcp。 sqlcmd 是一个允许你用命令行与 SQL Server 进行交互的工具。你可以用它来运行 SQL 脚本,执行数据库维护任务,以及进行其他数据库管理操作。 b…

库存管理内训课件|39页PPT

文件是一份关于库存管理的内训课件,内容涵盖了库存管理的定义、分类、作用、存在的问题、管控目标以及具体管控措施。以下是对课件内容的总结: 1. 定义及分类 库存:为满足未来需求而暂时闲置的有价值的资源,与物品是否处于运动状…

大零售时代下融合发展的新路径:定制开发技术的应用与思考

摘要:本文探讨在大零售背景下,传统零售边界模糊,融合成为趋势。分析大零售包含的跨行业跨业态融合等三个层面,重点阐述定制开发技术中的 21 链动模式、AI 智能名片和 S2B2C 商城小程序在推动大零售发展中的作用和意义,…

OceanBase 安装使用详细说明

OceanBase 安装使用详细说明 一、系统环境要求二、安装OceanBase环境方案一:在线下载并安装all-in-one安装包方案二:离线安装all-in-one安装包安装前的准备工作三、配置OceanBase集群编辑配置文件部署和启动集群连接到集群集群状态和管理四、创建业务租户和数据库创建用户并赋…

基于LabVIEW应用ARINC 429板卡实现数据通讯——(下篇)

五、基于LabVIEW实现数据通讯 基于LabVIEW实现429板卡的数据通讯是调用API 动态链接库文件来实现的。该文件中有许多的板卡操作函数,在调用板卡中必须按照一定的函数调用流程来操作板卡,否则极易出现板卡操作错误。 1、API函数的调用步骤 API函数的调…

Android Studio打包时不显示“Generate Signed APK”提示信息

Android Studio打包时,默认显示“Generate Signed APK”提示信息,如下图所示: 如果在打包时不显示“Generate Signed APK”提示信息,解决办法是: Android Studio菜单栏,“File->Settings->Appearan…