[C++] opencv - Mat::convertTo函数介绍和使用场景

Mat::convertTo()函数

Converts an array to another data type with optional scaling.   

该函数主要用于数据类型的相互转换。

The method converts source pixel values to the target data type. saturate_cast<> is applied at the end to avoid possible overflows:

m(x,y)=saturate_cast<rtype>(α(∗this)(x,y)+β)   

这是函数底层算法实现公式,了解算法方便我们熟练运用该函数。

函数原型:

void cv::Mat::convertTo(OutputArray m, int rtype) const;void cv::Mat::convertTo(OutputArray m, int rtype, double alpha=1, double beta=0) const;

参数说明:
m:目标矩阵。如果m在运算前没有合适的尺寸或类型,将被重新分配。

rtype: 标矩阵的类型。因为目标矩阵的通道数与源矩阵一样,所以rtype也可以看做是目标矩阵的位深度。如果rtype为负值,目标矩阵和源矩阵将使用同样的类型。

alpha: 尺度变换因子(可选)。默认值是1。即把原矩阵中的每一个元素都乘以alpha。

beta: 附加到尺度变换后的值上的偏移量(可选)。默认值是0。即把原矩阵中的每一个元素都乘以alpha,再加上beta。

函数使用案例

降低图像的亮度

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{// 读取一张灰色图片Mat img = imread("D:/LocalTest/images/beauty_01.jpg", IMREAD_GRAYSCALE);imshow("原始灰度图片", img);// 降低图像的亮度Mat target_img;img.convertTo(target_img, -1, 1.0, -50);// 打印第一行第一个像素的原始值int img_value = img.at<uchar>(0, 0);int target_img_value = target_img.at<uchar>(0, 0);cout << "The original value of the first pixel is: " << img_value << endl;cout << "The target img value of the first pixel is: " << target_img_value << endl;imshow("减少图像亮度", target_img);// 等待用户按下任意键退出程序waitKey(0);return 0;
}

输出结果:

The original value of the first pixel is: 243

The target img value of the first pixel is: 193

对图像进行归一化处理

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{// 读取一张灰色图片Mat img = imread("D:/LocalTest/images/beauty_01.jpg", IMREAD_GRAYSCALE);imshow("原始灰度图片", img);// 将灰色图片转换为进行归一化Mat norm_img;img.convertTo(norm_img, CV_32FC1, 1.0/255.0);// 打印第一行第一个像素的原始值int img_value = img.at<uchar>(0, 0);float norm_img_value = norm_img.at<float>(0, 0);cout << "The original value of the first pixel is: " << img_value << endl;cout << "The norm value of the first pixel is: " << norm_img_value << endl;imshow("归一化图片", norm_img);// 等待用户按下任意键退出程序waitKey(0);return 0;
}

输出结果:

The original value of the first pixel is: 243

The norm value of the first pixel is: 0.952941

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

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

相关文章

Pytest应用PO设计模式

Pytest应用PO设计模式 本篇内容主要涉及在软件测试中实现PO设计模式的应用 包含PO思想、PO原则、PO使用方法&#xff0c;最后会写一个实际模板供大家参考。 一、PO思想 ​ PO(PageObject)&#xff0c;在UI页面测试时&#xff0c;通常会存在大量的页面元素和各种点击操作&#…

坚持刷题 | 二叉树的层序遍历

坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天刷&#xff1a;二叉树的层序遍历 题目 102二叉树的层序遍历 考察点 数据结构基础&#xff1a; 能够正确地使用二叉树数据结构&#xff0c;并了解二叉树的基本性质。编程基础&#xff1a; 能够熟练使用Java编程语言&a…

【NewSQL】-- 分布式数据库 TiDB 和 CockroachDB

一、基本描述 1、TiDB 国产骄傲。从2015年开始&#xff0c;至今已8年&#xff0c;当前最新版本是7.5.x。TiDB 开源分布式 NewSQL 关系型数据库 是新一代开源分布式 NewSQL 数据库&#xff0c;模型受 Google Spanner / F1 论文的启发&#xff0c;实现了自动的水平伸缩&#xff…

win/ubuntu/mac 卸载 安装 docker 命令

1 卸载 参见 Docker 官网: mac /Applications/Docker.app/Contents/MacOS/uninstall卸载Docker Desktop后&#xff0c;可能会留下一些可以删除的剩余文件&#xff1a;rm -rf ~/Library/Group\ Containers/group.com.docker rm -rf ~/Library/Containers/com.docker.docker r…

网络编程【1】

【 1 】什么是网络编程 网络编程是指通过计算机网络进行数据交换和通信的编程过程。它涉及到使用网络协议和通信接口&#xff0c;使不同计算机之间能够进行数据传输和通信。 总结&#xff1a; 网络编程的研究前提就是基于互联网 网络编程就是基于互联网写代码 【 2 】为什么…

Qt编程之仿gnome-terminal终端样式 +颜色文字显示

Qt仿linux 终端样式 颜色文字 1.说再多废话不如直接show code2.实现效果 本文采用QTextBrowser作为文本显示窗口&#xff0c;进行文本的显示。本文实例实现的效果并没有终端的输入效果&#xff0c;这里只是提供一些仿终端样式思路。 1.说再多废话不如直接show code 1.ui文件…

0间隔24h采集线报+源码的资源网

一款网站程序零间隔24h采集线报源码的资源网&#xff0c;更新下载类目的采集 及 导入&#xff0c;这款网站程序&#xff1a;jizhiCMS 高仿新版某刀资源网模板进行自动采集。 安装方法&#xff1a; 将根目录文件上传服务器 将根目录文件的sql.sql导入mysql数据库 环境需要支…

【刷题】 leetcode 2 .两数相加

两数相加 两数相加1 思路一 &#xff08;暴毙版&#xff09;2 思路二 &#xff08;本质出发&#xff09; 谢谢阅读Thanks♪(&#xff65;ω&#xff65;)&#xff89;下一篇文章见&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 两数相加 我们来看…

【Spring Boot 3】【Redis】分布式锁

【Spring Boot 3】【Redis】分布式锁 背景介绍开发环境开发步骤及源码工程目录结构总结 背景 软件开发是一门实践性科学&#xff0c;对大多数人来说&#xff0c;学习一种新技术不是一开始就去深究其原理&#xff0c;而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经…

逆向使用webpack打包的网站

webpack webpack 是 JavaScript 应用程序的模块打包器,可以把开发中的所有资源&#xff08;图片、js文件、css文件等&#xff09;都看成模块&#xff0c;通过loader&#xff08;加载器&#xff09;和 plugins &#xff08;插件&#xff09;对资源进行处理&#xff0c;打包成符…

Stack详解(Java)

Stack Java 中的 Stack 是一种基于后进先出&#xff08;LIFO&#xff09;原则的数据结构。Stack 类实现了一个标准的堆栈&#xff0c;它继承自 Vector 类&#xff0c;并提供了一些额外的方法来支持堆栈的操作。 下面是一些 Java Stack 类的详细解释&#xff1a; 构造方法&…

【Nginx】使用自生成证书配置nginx代理https

使用Nginx代理HTTPS请求并使用自签名证书&#xff0c;可以按照以下步骤进行配置&#xff1a; 生成自签名证书&#xff1a; 打开终端或命令提示符&#xff0c;并导航到Nginx配置文件所在的目录。运行以下命令生成自签名证书和私钥&#xff1a; openssl req -x509 -nodes -days 3…

PyTorch 稀疏函数解析:embedding 、one_hot详解

目录 PyTorch子模块Sparse functions详解 embedding 参数 输出形状 示例 带有 padding_idx 的示例 embedding_bag 参数 输出形状 示例 使用 padding_idx 的示例 one_hot 参数 返回 示例 总结 PyTorch子模块Sparse functions详解 embedding torch.nn.function…

Git怎么将文件夹上传至github,全过程

小白建议参考github文件上传全流程-新手入门系列&#xff08;超详细&#xff01;&#xff01;&#xff01;&#xff09; 中间可能会有报错 $ ssh -T gitgithub.com ssh: connect to host github.com port 22: Connection timed out 这时&#xff0c;参考&#xff0c;如何解决&a…

React 基于Ant Degisn 实现table表格列表拖拽排序

效果图&#xff1a; 代码&#xff1a; myRow.js import { MenuOutlined } from ant-design/icons; import { DndContext } from dnd-kit/core; import { restrictToVerticalAxis } from dnd-kit/modifiers; import {arrayMove,SortableContext,useSortable,verticalListSorti…

std::for_each 简单使用

首先简单使用一下 std::for_each 是C标准库中的一个算法&#xff0c;用于对指定范围内的元素执行指定的操作。它通常用于迭代容器中的元素&#xff0c;对每个元素执行某种操作。下面是一个简单的例子&#xff0c;说明如何使用 std::for_each&#xff1a; #include <iostre…

.Net 全局过滤,防止SQL注入

问题背景&#xff1a;由于公司需要整改的老系统的漏洞检查&#xff0c;而系统就是没有使用参数化SQL即拼接查询语句开发的程序&#xff0c;导致漏洞扫描出现大量SQL注入问题。 解决方法&#xff1a;最好的办法就是不写拼接SQL&#xff0c;改用参数化SQL&#xff0c;推荐新项目…

2023年的年度总结PPT不一样了?

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 到了年终&#xff0c;需要撰写年度总结和制定计划了吗&#xff1f; 找不到合适的 PPT 模板&#xff1f; 感到缺乏灵感&#xff1f; 为做 PPT 绞尽脑汁&#xff1f; 为何不试试 AI 写 PPT 呢&#xff1f…

SQL笔记 -- 范式(第一范式、第二范式、第三范式、巴斯范式、反范式)及数据库设计原则

1.范式 1.1 范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。可以理解为&#xff0c;一张数据表的设计结构需要满足的某种设计标准的级别 。要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。 目前关系型数据库有六种常…