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

这篇具有很好参考价值的文章主要介绍了[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

[C++] opencv - Mat::convertTo函数介绍和使用场景,C++,opencv,opencv,计算机视觉,人工智能

[C++] opencv - Mat::convertTo函数介绍和使用场景,C++,opencv,opencv,计算机视觉,人工智能

对图像进行归一化处理

#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

[C++] opencv - Mat::convertTo函数介绍和使用场景,C++,opencv,opencv,计算机视觉,人工智能

[C++] opencv - Mat::convertTo函数介绍和使用场景,C++,opencv,opencv,计算机视觉,人工智能文章来源地址https://www.toymoban.com/news/detail-802524.html

到了这里,关于[C++] opencv - Mat::convertTo函数介绍和使用场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [C++] opencv - approxPolyDP(多边形拟合)函数介绍和使用场景

    OpenCV中的 approxPolyDP() 函数用于对形状进行逼近,以减少多边形的顶点数,可以用于对图像轮廓点进行多边形拟合。 函数原型如下: 其中, curve 是输入的点集,类型为 InputArray, 可以是 Mat 、 vectorPoint 等; approxCurve是输出的点集,类型为 OutputArray, 也是 Mat 类型; epsilon 是精

    2024年03月14日
    浏览(70)
  • [C++] opencv - fillPoly(填充多边形)函数介绍和使用场景

    fillPoly() 函数是OpenCV中用于绘制填充多边形的函数。函数原型如下: fillPoly() 函数适用于需要绘制填充多边形的场景,例如在图像上绘制一个封闭的图形、制作一个简单的遮罩等。   fillPoly() 函数是OpenCV中用于绘制填充多边形的函数。可以用来绘制实心三角形,实心矩形,实

    2024年02月19日
    浏览(131)
  • Qt-OpenCV学习笔记--基本函数操作--cv::convertTo(图像类型转换)

    不是所有格式的Mat型数据都能被使用。 目前OpenCV主要只支持单通道和3通道的图像,并且此时要求其深度为8bit和16bit无符号(即CV_16U),所以其他一些数据类型是不支持的,比如说float型等。 如果Mat类型数据的深度和通道数不满足上面的要求,则需要使用convertTo()函数和cvtColor(

    2024年02月04日
    浏览(59)
  • OpenCV第 1 课 计算机视觉和 OpenCV 介绍

      我们人类可以通过眼睛看到五颜六色的世界,是因为人眼的视觉细胞中存在分别对红、绿、蓝敏感的 3 种细胞。其中的光感色素根据光线的不同进行不同比例的分解,从而让我们识别到各种颜色。   对人工智能而言,学会“ 看 ”也是非常关键的一步。那么机器人是如

    2024年01月24日
    浏览(50)
  • 【C++】OpenCV:计算机视觉库介绍及C++环境配置

    OpenCV 是一个跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 OpenCV 是用C++语言编写的,同时留有C ++(工程部署用)、Python(深度学习用)、Java和MATLAB(Matlab好多例子都调用的opencv)接口,为了学习(juan)和部署视觉类的应用,记录一

    2024年01月19日
    浏览(55)
  • OpenCV 3 - Mat对象介绍

    Mat对象OpenCV2.0之后引进的图像数据结构、 自动分配内存、不存在内存泄漏的问题 ,是面向对象的数据结构。分了两个部分, 头部 与 数据部分 lpllmage是从2001年OpenCv发布之后就一直存在,是c语言风格的数据结构,需要开发者自己分配与管理内存, 对大的程序使用它容易导致

    2024年02月19日
    浏览(36)
  • 计算机视觉的应用26-关于Fast-R-CNN模型的应用场景,Fast-R-CNN模型结构介绍

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用26-关于Fast-R-CNN模型的应用场景,Fast-R-CNN模型结构介绍。Fast R-CNN是一种深度学习模型,主要用于目标检测任务,尤其适用于图像中物体的识别与定位。该模型在基于区域的卷积神经网络(R-CNN)系列中具有重要地位,

    2024年04月16日
    浏览(60)
  • opencv常用函数,QT中Mat与QImage的转换

    opencv是一个跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上,实现了图像处理和计算机视觉方面的很多通用算法。 Mat imread( const String filename, int flags = IMREAD_COLOR );是从指定文件载入一幅图像 filename:要读入图片的完整路径 flags:读入图片

    2024年02月04日
    浏览(48)
  • 【计算机视觉 · OpenCV】使用 OpenCV 调用手机摄像头

    Droidcam 是一款可以将手机变成网络摄像头的工具,我们可以利用 Droidcam 让 OpenCV 拥有调用手机摄像头的能力。 2.1 安装 DroidCam 在手机和电脑上分别安装 DroidCam 的客户端和服务端 下载地址:https://pan.baidu.com/s/1DrBn3P1Bx-SXa4d6oziifA?pwd=gr1o 提取码:gr1o 2.2 测试连接状态 手机和电脑需

    2024年02月09日
    浏览(52)
  • 计算机视觉:使用opencv实现车牌识别

    汽车车牌识别(License Plate Recognition)是一个日常生活中的普遍应用,特别是在智能交通系统中,汽车牌照识别发挥了巨大的作用。汽车牌照的自动识别技术是把处理图像的方法与计算机的软件技术相连接在一起,以准确识别出车牌牌照的字符为目的,将识别出的数据传送至交

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包