python解析曲线数据图方法一则

我们在数据分析工作中,经常遇到没有直接数据的情况,对于曲线图情况,我们需要解析曲线图中的数据。

例如下图,根据文档我们获知横坐标取值范围为(0,175),纵坐标取值范围(0,156)。如何把曲线转换为可操作的数据呢,具体步骤如下:
在这里插入图片描述

  1. 用画图工具抠图,按曲线图坐标边界抠出待处理图形,例如windows系统上的“画图”功能即可;
  2. 使用OpenCV提供的API,详见“Opencv-python去图标与水印方案实践”,采用直接提取曲线的方案;
  3. 使用OpenCV提供的图像灰度处理及二值化API,得到目标图;
  4. 解析二值化的灰度图像得出数据。

1. 用画图工具抠图

在这里插入图片描述
我们把抠出来的图,另存为:heart1.JPG。

2. OpenCV直接提取曲线的方案

import numpy as np
import matplotlib.pyplot as plt
import cv2
img=cv2.imread('img\heart1.JPG')h,w,l=img.shapefor j in range(h):for k in range(w):if img[j][k][0] <135 or img[j][k][0] >175 or img[j][k][1] <185 or img[j][k][1] >220 or img[j][k][2] <45 or img[j][k][2] >129:img[j][k][0] = 255img[j][k][1] = 255 img[j][k][2] = 255plt.imshow(img,cmap=plt.cm.gray)

其中,提取颜色范围值,请参照文档“Opencv-python去图标与水印方案实践”。

3. 使用OpenCV图像灰度处理及二值化API

image_gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)  # 转换成灰度图
plt.imshow(image_gray,cmap=plt.cm.gray)
# 二值化
thresh, new_img = cv2.threshold(image_gray, 200, 255, cv2.THRESH_BINARY)cv2.imshow('NEW_IMG', new_img)
cv2.waitKey()
new_img = new_img.astype(np.int16)

注:图像数据格式是uint8,最大值255,需要转换为int16,存储实际坐标值。

OpenCV提供的图像二值化API,threshold()方法参数:

  • 图片矩阵
  • 阈值
  • 图片中的最大值
  • 二值化的方式

二值化的方式:

THRESH_BINARY高于阈值改为255,低于阈值改为0
THRESH_BINARY_INV高于阈值改为0,低于阈值改为255
THRESH_TRUNC截断,高于阈值改为阈值,最大值失效
THRESH_TOZERO高于阈值不改变,低于阈值改为0
THRESH_TOZERO_INV高于阈值该为0,低于阈值不改变

在这里插入图片描述

4. 解析二值化的灰度图像得出数据

解析数据的原理:

首先,明确坐标系统,图像数据(二维),从(0,0)开始对应实际图形(0,h),其中h是最大高度,可以理解为纵向坐标倒序。

其次,解析图数据,对于图中曲线黑色,数值为0,直接标记为纵轴的坐标(注意倒序),其他设置为0,由此获得二维矩阵待处理。

接着,按坐标均值定义为目标数据。

r,c = new_img.shape
for i in range(r):for j in range(c):if new_img[i][j]==255:new_img[i][j]=0else:new_img[i][j]=280 - i + 1dat = new_img.mean(axis=0, keepdims=False,where=new_img>0)#滤除手工抠图边界无数据情况
mask = np.isnan(dat)
dat = np.delete(dat, np.where(mask))
dat = dat*156/np.max(dat)
# 解析出数据,未进行度量单位转换
new_dat = dat.astype(np.int16)# 绘图回放数据
plt.rcParams['font.sans-serif'] = ['SimHei']     # 设置正常显示中文
plt.rcParams['axes.unicode_minus']=False # 解决不显示负号 
plt.figure(figsize=(12,6))
plt.xlim(0,570)
x_lable = ['0','30','60','90','120','150','180']
pos_list = [0, 94, 188, 281, 375, 469,563]plt.xticks(pos_list, x_lable)
#ax = plt.axes()
#ax.xaxis.set_major_locator(ticker.FixedLocator((name_list)))
#ax.xaxis.set_major_formatter(ticker.FixedFormatter((x_lable)))
plt.ylim(0,180)
plt.plot(new_dat)
plt.ylabel("心率")plt.show()

绘图回放数据,结果如下:
在这里插入图片描述

5. 总结

解析曲线数据图还是比较麻烦,首先是图像处理技术,我们常见的曲线图一般都较为干净,好处理些。在解析过程中,需要进行坐标转换,也就是数据的度量单位。

欢迎交流更多的方法。

参考:

肖永威. Opencv-python去图标与水印方案实践. CSDN博客. 2023.09

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

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

相关文章

docker 配置 gpu版pytorch环境--部署缺陷检测--Anomalib

目录 一、docker 配置 gpu版pyhorch环境1、显卡驱动、cuda版本、pytorch cuda版本三者对应2、拉取镜像 二、部署Anomalib1、下载Anomalib2、创建容器并且运行3、安装Anomalib进入项目路径安装依赖测试&#xff1a; 一、docker 配置 gpu版pyhorch环境 1、显卡驱动、cuda版本、p…

计算机视觉与深度学习-经典网络解析-GoogLeNet-[北邮鲁鹏]

这里写目录标题 GoogLeNet参考GoogLeNet模型结构创新点Inception结构&#xff0c;它能保留输入信号中的更多特征信息去掉了AlexNet的前两个全连接层&#xff0c;并采用了平均池化引入了辅助分类器 GoogLeNet GoogLeNet的设计主要特点是引入了Inception模块&#xff0c;这是一种…

oracle客户端的安装(SQL Developer)

参考资料 软件首页&#xff1a;https://www.oracle.com/database/sqldeveloper/ 官方文档&#xff1a;https://docs.oracle.com/en/database/oracle/sql-developer/ 下载地址&#xff1a;https://www.oracle.com/database/sqldeveloper/technologies/download/ 安装指南&#…

GLTF编辑器 解析什么是模型粗糙度

1、什么是模型粗糙度 模型粗糙度&#xff08;roughness&#xff09;通常用于计算机图形学中的PBR&#xff08;Physically Based Rendering&#xff0c;基于物理的渲染&#xff09;模型中。 PBR模型是一种基于物理光学原理和材料属性的渲染方法&#xff0c;能够更加准确地还原物…

全国职业技能大赛云计算--高职组赛题卷④(容器云)

全国职业技能大赛云计算--高职组赛题卷④&#xff08;容器云&#xff09; 第二场次题目&#xff1a;容器云平台部署与运维任务1 Docker CE及私有仓库安装任务&#xff08;5分&#xff09;任务2 基于容器的web应用系统部署任务&#xff08;15分&#xff09;任务3 基于容器的持续…

使用 PyTorch 的计算机视觉简介 (2/6)

一、说明 在本单元中&#xff0c;我们从最简单的图像分类方法开始——一个全连接的神经网络&#xff0c;也称为感知器。我们将回顾一下 PyTorch 中定义神经网络的方式&#xff0c;以及训练算法的工作原理。 二、数据加载的实践 首先&#xff0c;我们使用 pytorchcv 助手来加载…

全球首发搭载“舱驾一体”的智能座舱,诺博汽车如何引领未来出行?

智能座舱升级战已经全面打响。 一方面&#xff0c;智能座舱已经进入了3.0时代&#xff0c;车企对于差异化要求越来越高&#xff0c;如何进一步提升单一功能体验并进行深度融合&#xff0c;已经成为了智能座舱市场比拼的重点。 另一方面&#xff0c;在5G、车联网、大数据、人工…

14.抽象工厂模式

UML 代码 #include <iostream> #include <list> using namespace std;class AbstractProductA { public:virtual void showa() 0; }; class ProductA1:public AbstractProductA { public:virtual void showa(){cout << "我是A1" << endl;}…

【线性回归、岭回归、Lasso回归分别预测患者糖尿病病情】数据挖掘实验一

Ⅰ、项目任务要求 任务描述&#xff1a;将“diabetes”糖尿病患者数据集划分为训练集和测试集&#xff0c;利用训练集分别结合线性回归、岭回归、Lasso回归建立预测模型&#xff0c;再利用测试集来预测糖尿病患者病情并验证预测模型的拟合能力。具体任务要求如下&#xff1a; …

[LLM+AIGC] 01.应用篇之中文ChatGPT初探及利用ChatGPT润色论文对比浅析(文心一言 | 讯飞星火)

近年来&#xff0c;人工智能技术火热发展&#xff0c;尤其是OpenAI在2022年11月30日发布ChatGPT聊天机器人程序&#xff0c;其使用了Transformer神经网络架构&#xff08;GPT-3.5&#xff09;&#xff0c;能够基于在预训练阶段所见的模式、统计规律和知识来生成回答&#xff0c…

电脑C盘爆红怎么办?(小白篇)

文章目录 前言&#xff1a;1、清理临时和系统文件2、更改电脑默认软件安装位置3、微信、QQ文件存储路径放在其它盘4、卸载一些不常用的软件彩蛋 前言&#xff1a; C盘作为电脑的系统盘&#xff0c;如果出现爆满或者剩余空间很小整个C盘变红&#xff0c;这样会导致电脑系统运行…

前端项目练习(练习-001-纯原生)

先创建一个空文件夹&#xff0c;名字为web-001,然后用idea开发工具打开&#xff0c;如图&#xff1a; 可以看到&#xff0c;这是个彻底的空项目&#xff0c;创建 index.html index.js index.css三个文件&#xff0c;如图&#xff1a; 其中&#xff0c;html文件内容如下&am…

华为OD机试 - 最小传输时延 - 深度优先搜索DFS(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明计算源节点1到目的节点5&#xff0c;符合要求的时延集合 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&…

时间复杂度、空间复杂度

一、时间复杂度 1、概念 时间复杂度&#xff1a;计算的是当一个问题量级增加的时间&#xff0c;时间增长的趋势&#xff1b; O&#xff08;大O表示法&#xff09;&#xff1a;渐进的时间复杂度 2、举例 ① 以下 for 循环的时间复杂度&#xff1a;O(1 3n) O(n) 去掉常数…

数据结构上机练习——单链表的基本操作、头文件、类定义、main函数、多种链表算法的实现,含注释

文章目录 单链表的基本操作实现1.头文件2.类定义和多种算法的实现2.1创建空表2.2头插法创建n个元素的线性链表2.3一个带头节点的链表存放一组整数&#xff0c;设计一个算法删除值等于x的所有节点。2.4计算线性表中值为偶数的节点个数2.5一个带头节点的单链表heada存放一组整数&…

nginx实现反向代理实例

1 前言 1.1 演示内容 在服务器上访问nginx端口然后跳转到tomcat服务器 1.2 前提条件 前提条件&#xff1a;利用docker安装好nginx、tomcat、jdk8&#xff08;tomcat运行需要jdk环境&#xff09; 只演示docker安装tomcat&#xff1a; 默认拉取最新版tomcat docker pull t…

Qt地铁智慧换乘系统浅学( 三 )最少路径和最少换乘实现

本算法全都基于广度优先 概念最短路径实现所用容器算法思路 最少换乘实现所需容器算法思路 成果展示代码实现判断是最短路径还是最少换乘最短路径代码实现最少换乘代码实现根据所得List画出线路 ui界面的维护&#xff08;前提条件&#xff09;界面初始化combox控件建立槽函数 概…

84、Redis客户端-->可视化图形界面工具(Another Redis Desktop Manager)的下载、安装及初步使用

Redis客户端–>可视化图形界面工具(Another Redis Desktop Manager)的下载、安装及初步使用 ★ Redis客户端&#xff1a; ▲ Redis自带的命令行工具&#xff08;简陋&#xff09;&#xff1a; CLI工具&#xff0c;重新打开一个命令行窗口&#xff0c;在其中输入如下命令&…

人工智能轨道交通行业周刊-第61期(2023.9.18-9.24)

本期关键词&#xff1a;焊线机器人、智能综合运维管理系统、信号平面图、铁路部门架构、书生浦语大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通…

uniapp、vue实现滑动拼图验证码

uniapp、vue实现滑动拼图验证码 实际开发工作中&#xff0c;在登陆的时候需要短信验证码&#xff0c;但容易引起爬虫行为&#xff0c;需要用到反爬虫验证码&#xff0c;今天介绍一下拼图验证码&#xff0c;解决验证码反爬虫中的滑动验证码反爬虫。滑动拼图验证码是在滑块验证码…