前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenCV-Python中没有Mat.convertTo函数怎么办?

OpenCV-Python中没有Mat.convertTo函数怎么办?

作者头像
OpenCV学堂
发布于 2022-07-06 10:41:17
发布于 2022-07-06 10:41:17
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

点击上方蓝字关注我们

微信公众号:OpenCV学堂 关注获取更多计算机视觉深度学习知识

函数说明

OpenCV C++的图像对象Mat有一个函数convertTo可以把图像数据在不同的精度类型之间来回切换比如从字节到浮点数之间来回切换。非常方便,该函数的官方说明如下:

其中参数alpha可以让数据放缩到指定的范围内,比如从字节到浮点数类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CV_8U 转换为CV_32Falpha=1.0/255.0时表示从0255切换到01之间

浮点数类型到字节类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CV_32F 转换为CV_8Ualpha=255时表示从01切换到0255之间

同时该函数还有另外一个功能就是对超过范围的数据进行最大最小极限取值,低于0的取值0,大于255取值255。

但是到了Python中之后,很多人就会认为convertTo函数只是一个数据精度类型转换函数,不会太过关心细节,然后直接使用它。这样的结果往往导致一些细数据差异跟输出不一致问题出现。

C++/Python对比

对一张输入图像完成Sobel滤波操作,C++实现的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Mat image = imread("D:/images/dannis1.png", IMREAD_GRAYSCALE);
imshow("input", image);
Mat m1, m2;
image.convertTo(m1, CV_32F, 1.0 / 255.0);
Mat gradx;
Sobel(m1, gradx, -1, 1, 0);
gradx.convertTo(m2, CV_8U, 255);
imshow("sobel", m2);

运行结果如下:

Python对应的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2 as cv
import numpy as np

image = cv.imread("D:/images/dannis1.png", cv.IMREAD_GRAYSCALE)
cv.imshow("input", image)
m1 = np.float32(image) / np.float(255)
gradx = cv.Sobel(m1, -1, 1, 0);
m2 = np.uint8(gradx * 255)
cv.imshow("sobel", m2)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果如下:

以往的经验处理方式是先对gradx做归一化然后再显示

这个时候只需添加一行代码即可获得正确结果,把代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m2 = np.uint8(gradx * 255)

替换为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cv.normalize(gradx, gradx, 0, 1.0, cv.NORM_MINMAX)m2 = np.uint8(gradx * 255)

然后再次运行,截图如下:

但是实际结果与C++并不一致,这个时候正确修改方式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m2 = np.uint8(gradx * 255)

替换为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m2 = np.uint8(np.clip(gradx * 255, 0, 255))

然后再次运行,截图如下:

Python版本结果跟C++保持一致了!这个很多书上跟博文并没有人提到,所以我写出来分享一下,这个技术细节点!

扫码查看OpenCV+OpenVIO+Pytorch系统化学习路线图

 推荐阅读 

CV全栈开发者说 - 从传统算法到深度学习怎么修炼

2022入坑深度学习,我选择Pytorch框架!

Pytorch轻松实现经典视觉任务

教程推荐 | Pytorch框架CV开发-从入门到实战

OpenCV4 C++学习 必备基础语法知识三

OpenCV4 C++学习 必备基础语法知识二

OpenCV4.5.4 人脸检测+五点landmark新功能测试

OpenCV4.5.4人脸识别详解与代码演示

OpenCV二值图象分析之Blob分析找圆

OpenCV4.5.x DNN + YOLOv5 C++推理

OpenCV4.5.4 直接支持YOLOv5 6.1版本模型推理

OpenVINO2021.4+YOLOX目标检测模型部署测试

比YOLOv5还厉害的YOLOX来了,官方支持OpenVINO推理

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
开源监控系统 Prometheus 最佳实践
作者:jimmiehan(韩金明) , 腾讯PCG后台开发工程师, Prometheus/Thanos contributor Prometheus 是目前最流行的开源监控系统之一, 这里以我在基于 Prometheus 构建天机阁 2.0Metrics 子系统的实践谈一谈 Prometheus 的一些最佳实践, 最佳实践的理念是 Prometheus 系统简单稳定高效运行的关键。(注: 天机阁 2.0 是新一代云原生可观测性系统) 埋点思路 最好将原始指标暴露给 Prometheus, 而不是在应用
腾讯技术工程官方号
2021/11/17
1.8K0
Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
作者 | 朱瑜坚 腾讯云后台开发工程师 Prometheus 是一个开源的监控解决方案,部署简单易使用,难点在于如何设计符合特定需求的 Metrics 去全面高效地反映系统实时状态,以助力故障问题的发现与定位。本文即基于最佳实践的 Metrics 设计方法,结合具体的场景实例——TKE 的网络组件 IPAMD 的内部监控,以个人实践经验谈一谈如何设计和实现适合的、能够更好反映系统实时状态的监控指标(Metrics)。该篇内容适于 Prometheus 或相关监控系统的初学者(可无任何基础了解),以及近期
腾讯云可观测平台
2020/06/05
2.8K0
第04期:Prometheus 数据采集(三)
爱可生上海研发中心成员,研发工程师,主要负责 DMP 平台监控告警功能的相关工作。
爱可生开源社区
2020/08/05
3.1K0
第04期:Prometheus 数据采集(三)
详细解读 Prometheus 的指标类型
原文链接:https://prometheus.io/docs/concepts/metric_types/
米开朗基杨
2019/08/29
2.5K0
从 Prometheus 到 OpenTelemetry: 指标监控的演进与实践
在上一篇:从 Dapper 到 OpenTelemetry:分布式追踪的演进之旅我们讲解了 Trace 的一些核心概念:
crossoverJie
2024/06/18
1.1K0
腾讯云某业务基于 DeepFlow 的可观测性实践
本文分享了腾讯云某业务基于 DeepFlow 的可观测性实践。面对复杂的业务服务(800+)和多样的编程语言,腾讯云某业务团队选择了 DeepFlow 作为跨语言、无侵入的可观测技术。与其他技术(如 Hubble 和 Pixie)相比,DeepFlow 在数据指标、协议支持和扩展能力等方面表现优异,成为最佳选择。引入 DeepFlow 后,腾讯云通过与现有系统的集成,实现了统一的服务性能监控和高效的故障排查能力,显著提升了运维效率,甚至能主动发现业务隐藏的 Bug,防范于未然。
DeepFlow
2024/06/05
7130
腾讯云某业务基于 DeepFlow 的可观测性实践
TiKV 源码解析系列文章(三)Prometheus(上)
Prometheus 支持四种指标:Counter、Gauge、Histogram、Summary。rust-prometheus 库目前还只实现了前三种。TiKV 大部分指标都是 Counter 和 Histogram,少部分是 Gauge。
PingCAP
2019/03/11
1.2K0
研究监控系统之prometheus
以前用过nagios和zabbix,nagios用起来太过原始,配置文件维护得很累,监控的图表也比较难看;zabbix的主要开发语言是C和PHP,要暴露一些自定义的监控指标较困难。网上一些云原生的项目都是用prometheus+grafana方案的,刚好花时间研究一下这个。
jeremyxu
2019/03/13
1.6K0
研究监控系统之prometheus
OpenTelemetry指标:概念、类型和插桩
探索 OpenTelemetry 指标:了解指标类型、插桩及其在性能监控中的作用。学习最佳实践以及如何开始使用 Checkly。
云云众生s
2024/08/02
5030
OpenTelemetry指标:概念、类型和插桩
OpenTelemetry - 云原生下可观测性的新标准
CNCF(Cloud Native Computing Foundation),中文为“云原生计算基金会”,CNCF是Linux基金会旗下的基金会,可以理解为一个非盈利组织。
全球技术精选
2021/01/21
1.2K0
OpenTelemetry - 云原生下可观测性的新标准
一文详解腾讯云可观测平台 APM 采样方案
前言:本文直击传统采样方案的痛点,着重介绍腾讯云 APM 新推出的采样策略优势:既能降低 APM 使用成本,又不会对用户的使用体验带来明显影响。
腾讯云可观测平台
2025/02/11
2180
一文详解腾讯云可观测平台 APM 采样方案
Prometheus 指标值不准:是 feature,还是 bug?
导语:笔者穷尽毕生绝学写就此文,通过剖析最典型的“怪现象”,解答 “Prometheus 指标值为何不准”这一灵魂拷问。
腾讯云可观测平台
2024/05/09
9840
Prometheus 指标值不准:是 feature,还是 bug?
如何基于标准化的OpenTelemetry构建APM探针能力
导语 | 本文推选自腾讯云开发者社区-【技思广益 · 腾讯技术人原创集】专栏。该专栏是腾讯云开发者社区为腾讯技术人与广泛开发者打造的分享交流窗口。栏目邀约腾讯技术人分享原创的技术积淀,与广泛开发者互启迪共成长。本文作者是腾讯前端高级开发工程师常敏。 云原生为传统监控带来挑战。云原生场景下,企业大规模地部署容器,应用节点呈指数级增长,故障可能发生在任意节点,无法感知与预测的因素越来越多。业界将“可观测性”能力划分为5个层级,其中告警(Alerting)与应用概览(Overview)属于传统监控的概念范畴。腾讯
腾讯云开发者
2022/09/08
9740
如何基于标准化的OpenTelemetry构建APM探针能力
运维监控之Prometheus入门简介篇
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,它将所有信息都存储为时间序列数据;因此实现一种Profiling监控方式,实时分析系统运行的状态、执行时间、调用次数等,以找到系统的热点,为性能优化提供依据。
lyb-geek
2019/07/15
8.4K0
可观测迁移实战:从自建困境到高效运维的华丽转身
在教育行业数字化转型进程中,某教育头部客户的运维团队面临自建 SkyWalking 监控系统的严峻挑战。随着业务规模扩张,系统运维复杂度呈指数级增长,运维团队每月 20% 以上工作时间都消耗在监控系统自身故障处理且微服务架构下的故障排查效率极低 ,针对这一现状,该团队通过技术架构升级与优化,与腾讯云可观测平台产研团队共创,实现了从传统自建监控体系向腾讯云可观测平台的迁移,同时也为教育行业监控系统转型提供实践范例。
腾讯云可观测平台
2025/06/11
750
可观测迁移实战:从自建困境到高效运维的华丽转身
Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
Prometheus 是一个开源的监控解决方案,部署简单易使用,难点在于如何设计符合特定需求的 Metrics 去全面高效地反映系统实时状态,以助力故障问题的发现与定位。本文即基于最佳实践的 Metrics 设计方法,结合具体的场景实例——TKE 的网络组件 IPAMD 的内部监控,以个人实践经验谈一谈如何设计和实现适合的、能够更好反映系统实时状态的监控指标(Metrics)。该篇内容适于 Prometheus 或相关监控系统的初学者(可无任何基础了解),以及近期有 Prometheus 监控方案搭建和维护需求的系统开发管理者。通过这篇文章,可以加深对 Prometheus Metrics 的理解,并能针对实际的监控场景提出更好的指标(Metrics)设计。
腾讯云原生
2020/05/22
3.8K0
OpenTelemetry 与 Prometheus - 架构和指标的差异
在不断发展的软件开发世界中,可观察性使软件工程师能够实时洞察复杂的系统。OpenTelemetry 和 Prometheus 是著名的云原生计算基金会 (CNCF) 毕业项目,但用于监控和调试应用程序的可观察性工具不同。
用户5166556
2024/01/10
1.9K0
OpenTelemetry 与 Prometheus - 架构和指标的差异
一文带你了解 Prometheus
作者:kevinkrcai,腾讯 IEG 后台开发工程师 Prometheus 是一个开源的完整监控解决方案,本文将从指标抓取到查询及可视化展示,以及最后的监控告警,对 Prometheus 做一个基本的认识。 1. 简介 Prometheus 是古希腊神话里泰坦族的一名神明,名字的意思是"先见之明",下图中是 Prometheus 被宙斯惩罚,饱受肝脏日食夜长之苦。 下面就是我们 CRUD Boy 所了解的 Prometheus,下面是其官网封面图引导语:From metrics to insight,
腾讯技术工程官方号
2022/05/10
1.5K0
一文带你了解 Prometheus
产品月报|Prometheus 支持跨账号采集 ,APM 支持对特定业务系统开启免费模式...
1.支持在容器集群详情页的 Prometheus 监控页面,一键安装集成中心中更多类型的组件监控,缩短用户使用路径。
腾讯云可观测平台
2025/02/11
960
产品月报|Prometheus 支持跨账号采集 ,APM 支持对特定业务系统开启免费模式...
如何基于标准化的OpenTelemetry构建APM探针能力
云原生为传统监控带来挑战。云原生场景下,企业大规模地部署容器,应用节点呈指数级增长,故障可能发生在任意节点,无法感知与预测的因素越来越多。业界将“可观测性”能力划分为5个层级,其中告警(Alerting)与应用概览(Overview)属于传统监控的概念范畴。腾讯云“应用性能观测”则补齐主动发现的能力。构建简单易用,高性能的全链路监控系统。如何做到简单易用,满足用户拿来即用的需求?构建标准化,完善的探针能力是关键。
拓荒牛儿
2022/05/13
3.7K6
如何基于标准化的OpenTelemetry构建APM探针能力
推荐阅读
相关推荐
开源监控系统 Prometheus 最佳实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档