OpenCV(cv::convertScaleAbs())

news/2024/9/23 14:15:09/文章来源:https://www.cnblogs.com/keye/p/18426976

目录
  • 1. 函数定义
  • 2. 原理
  • 3. 示例
  • 4. 参数作用详解
    • 4.1 alpha 的作用
    • 4.2 beta 的作用
  • 5. 应用场景
  • 6. cv::convertScaleAbs()cv::normalize() 的区别
  • 总结



cv::convertScaleAbs() 是 OpenCV 中用于将图像像素值缩放并转换为 8 位无符号整数类型的函数。它常用于处理计算结果为浮点数或负值的图像,特别是在图像处理过程中,如应用拉普拉斯算子、Sobel 算子等边缘检测操作后。



1. 函数定义

void cv::convertScaleAbs(InputArray src, OutputArray dst, double alpha = 1, double beta = 0
);

参数:

  1. src:

    • 输入数组或图像。可以是任意深度的单通道或多通道数组,如 CV_32FCV_64FCV_16S 等。
  2. dst:

    • 输出数组或图像。dst 总是一个 8 位无符号整数图像(CV_8U),这是由 convertScaleAbs() 函数保证的。
  3. alpha:

    • 可选的缩放因子。默认为 1.0。此参数用来对输入图像的每个像素值进行缩放,结果为:dst(i) = saturate_cast<uchar>(alpha * src(i) + beta)
  4. beta:

    • 可选的添加常数。默认为 0。此参数在缩放之后向每个像素值添加一个偏移量。


2. 原理

convertScaleAbs() 主要执行以下三个步骤:

  1. 缩放: 将输入图像中每个像素值乘以一个缩放因子 alpha。这在处理如梯度或导数图像时非常有用,可以放大图像中数值较小的变化。

  2. 偏移: 在缩放后的像素值上加上一个常数 beta,可以用于调整图像的亮度。

  3. 转换到 8 位无符号整数类型: 函数将结果取绝对值并转换为 8 位无符号整数。具体来说,负值会被转换为正值,浮点数会被截断为整数,而超过 255 的值会被裁剪到 255。函数内部使用 saturate_cast<uchar>() 来确保值保持在 [0, 255] 范围内。



3. 示例

#include <opencv2/opencv.hpp>
using namespace cv;int main() {// 读取图像Mat src = imread("image.jpg", IMREAD_GRAYSCALE);// 检查是否成功加载图像if (src.empty()) {return -1;}// 假设我们使用了 Sobel 算子或其他操作,并得到了一个 CV_16S 的图像Mat grad_x;Sobel(src, grad_x, CV_16S, 1, 0); // 计算 X 方向的梯度// 使用 convertScaleAbs 将 CV_16S 转换为 CV_8UMat abs_grad_x;convertScaleAbs(grad_x, abs_grad_x);// 显示结果imshow("Sobel X", abs_grad_x);waitKey(0);return 0;
}
  1. 使用 Sobel 算子:

    • 在该示例中,我们首先对图像应用了 Sobel 算子来计算 X 方向的梯度。Sobel 的输出通常为 CV_16S,因为导数计算会导致负值。
  2. convertScaleAbs() 的应用:

    • convertScaleAbs() 用于将 Sobel 输出的 16 位有符号整数图像(CV_16S)转换为 8 位无符号整数图像(CV_8U)。它首先将图像像素取绝对值(避免负值),然后裁剪到 [0, 255] 范围内。


4. 参数作用详解

4.1 alpha 的作用

alpha 是一个缩放因子,常用于对输入图像的值进行比例调整。比如,在处理图像梯度时,梯度值可能比较小或比较大,直接显示会显得不明显。通过调整 alpha,可以放大或缩小这些值。

double alpha = 0.5;  // 缩小梯度值
convertScaleAbs(grad_x, abs_grad_x, alpha);

4.2 beta 的作用

beta 是一个偏移量,通常用于整体调整图像的亮度。比如,给图像中的每个像素增加一个常数值来提高亮度。

double beta = 50;  // 提高图像亮度
convertScaleAbs(grad_x, abs_grad_x, 1, beta);


5. 应用场景

  1. 梯度图像处理: cv::convertScaleAbs() 常用于处理导数和梯度图像,比如在应用 Sobel 算子或拉普拉斯算子后,结果图像可能包含负值,必须将其转换为正值并且适合显示。

  2. 浮点数图像处理: 如果你有浮点数格式(如 CV_32F)的图像结果,convertScaleAbs() 可以将其缩放到可显示的范围内。

  3. 归一化: 可以通过设置合适的 alphabeta 值,对图像进行缩放和归一化处理。



6. cv::convertScaleAbs()cv::normalize() 的区别

  • cv::normalize() 是一种标准化函数,用于将图像像素值缩放到一个指定的范围。它的功能更为广泛,可以用于最大最小值归一化、L2 归一化等。
  • cv::convertScaleAbs() 是一种缩放与取绝对值的函数,更加简化,常用于将结果转换为适合显示的 8 位图像。


总结

cv::convertScaleAbs() 是 OpenCV 中非常实用的工具,它通过缩放和取绝对值,将高精度的图像数据转换为适合显示的 8 位无符号整数图像。它在处理边缘检测、梯度运算、浮点图像时尤为常用,并且能够有效防止负值和过大数值带来的显示问题。



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

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

相关文章

多语言文本 AI 情感分析 API 数据接口

多语言文本 AI 情感分析 API 数据接口 AI / 文本处理 AI 模型快速分析文本情感倾向 多语言文本 / 情感分析。1. 产品功能支持多语言文本情感分析; 基于特定 AI 模型,快速识别文本情感倾向; 适用于评论分析、舆情监控等场景; 全接口支持 HTTPS(TLS v1.0 / v1.1 / v1.2 / v1…

【unity开发】以OPPO手机为例,如何连接安卓设备并调试unity程序

1.有线调试 下面全程以oppo手机为例: 1.打开手机开发者模式 设置->关于手机->版本信息->狂点版本号直到弹出提示打开开发者模式即可2.打开USB调试 打开开发者模式之后 在设置->其他设置->开发者选项->USB调试打开即可3.USB数据线连接 使用USB数据线连接你的…

多语言文本 AI 纠错格式化 API 数据接口

多语言文本 AI 纠错格式化 API 数据接口 AI / 文本处理 AI 模型智能纠正 语法纠错 / 文本格式化。1. 产品功能支持多语言文本的语法纠错; 自动识别并纠正拼写错误、语法错误和标点符号使用不当; 优化文本格式,提高可读性; 基于AI模型,持续学习和更新,提高纠错准确率; 适…

从0到1搭建权限管理系统系列三 .net8 JWT创建Token并使用Av

说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。 该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。 说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 结合上一篇文章使用,味道更佳:…

9.23人工智能技术——绘图

主题:17.我变成了一棵树 设计思路:我选择的主题是一节语文课——我变成了一棵树的绘图设计。本节课的内容基调是童趣轻快活泼且富有想象气息的,所以我选择了明亮的蓝天白云绿草作为背景,使得画面温馨欢快。然后根据课文内容,我将课文里出现的一些关键事物添加到背景上,构…

kettle从入门到精通 第八十六课 ETL之kettle kettle调用https接口忽略SSL校验

1、在使用kettle调用接口的时候不可避免要调用http或者https接口,调用http接口kettle可以正常工作,但是遇到https接口的时候kettle就会提示证书有误,无法正常调用接口,今天咱们一起通过自研插件的方式来解决这个问题。自研插件需要有一定的java基础,git上有比较多的例子,…

串口环保212设备数据 转profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 测试数采仪的串口数据 2 4 配置网关采集212设备数据 4 5 用PROFINET IO协议转发数据 5 6 案例总结 8 1 案例说明数采仪通过串口输出环保212的数据,网关通过串口采集数采仪的数据。 网关把采集的数据转换成profinet IO从站数据。2 V…

从0到1搭建权限管理系统系列三 .net8 JWT创建Token并使用

说明该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 结合上一篇文章使用,味道更佳:从0…

任务四:制作二维码

使用草料二维码制作二维码https://cli.im/ 1.选择网址一栏,设置“网址跳转活码”,把网址填入后生成相应二维码 2.此网址为中少年快乐阅读平台http://202.96.31.36:8888/旨在拓展学生课外知识,扩大知识面 3.微信有时会当作不良网页,禁止跳转 把二维码加入海报中 1.成品

Leetcode 65. 有效数字

1.题目基本信息 1.1.题目描述 给定一个字符串 s ,返回 s 是否是一个 有效数字。 例如,下面的都是有效数字:”2″, “0089”, “-0.1”, “+3.14”, “4.”, “-.9”, “2e10”, “-90E3”, “3e+7”, “+6e-1”, “53.5e93”, “-123.456e789″,而接下来的不是:”abc”, “…

结对项目——实现一个自动生成小学四则运算题目的命令行程序

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里 结对项目 - 作业 - 计科22级34班 - 班级博客 - 博客园 (cnblogs.com)这个作业的目标 结对项目——实现一个自动生成小学四则运算题目的命令行程序成员1 陈奕奕 3222004552成员2 林闰…

任务三:pdf转换器应用

本次添加水印我使用的lightPDF网页进行水印的添加工作https://lightpdf.com/ 1.首先要先注册账号 2.可以使用浏览器对网页进行翻译 3.在“pdf工具栏”中找到第三列“编辑pdf”的位置,选择“水印pdf” 4.把需要添加水印的文件添加到网页中 5.对水印的大小,透明度,颜色,内容进…