目录

  • 概念
  • C++源码
    • 变换函数
    • 主函数
  • 效果
  • 完整源码

平台:Windows 10 20H2
Visual Studio 2015
OpenCV 4.5.3


本文内容节选自《数字图像处理》第三版
C++源码修改自C++数字图像处理(1)-伽马变换 —— 图像大师

概念





C++源码

变换函数

//函数名:gammaTransformation
//作用:实现伽马变换
//参数:
//matInput:输入图像
//fGamma : 伽马值
//fC : C值(缩放系数)
//返回值 :变换后的图像
Mat gammaTransformation(cv::Mat matInput, float fGamma, float fC = 1.0f)
{Mat chRGB[3];Mat matOutput[3];Mat output = matInput.clone();split(matInput, chRGB);for (unsigned char k = 0; k < 3; ++k){//构造输出图像matOutput[k] = cv::Mat::zeros(chRGB[k].rows, chRGB[k].cols, chRGB[k].type());//循环中尽量避免除法float fNormalFactor = 1.0f / 255.0f;for (size_t r = 0; r < chRGB[k].rows; r++){unsigned char* pInput = chRGB[k].data + r * chRGB[k].step[0];unsigned char* pOutput = matOutput[k].data + r * matOutput[k].step[0];for (size_t c = 0; c < chRGB[k].cols; c++){//gamma变换float fOutput = std::pow(pInput[c] * fNormalFactor, fGamma) * fC;//数值溢出判断fOutput = fOutput > 1.0f ? 1.0f : fOutput;//输出pOutput[c] = static_cast<unsigned char>(fOutput * 255.0f);}}}merge(matOutput, 3, output);return output;
}

主函数

图片路径根据实际情况调整,注意反斜杠是转义字符的开头,故“\”应替换为“\\”

int main(int argc, char * argv[])
{string GammaPic = "Gamma=";float Gamma = 0.5;Mat Image = imread("D:\\Work\\OpenCV\\Workplace\\Test_1\\1.jpg");imshow("原图", Image);imshow(GammaPic + to_string(Gamma) + "变换后", gammaTransformation(Image, Gamma));waitKey(0);return 0;
}

效果


Gamma = 0.5 时

Gamma = 2 时

完整源码

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;//函数名:gammaTransformation
//作用:实现伽马变换
//参数:
//matInput:输入图像
//fGamma : 伽马值
//fC : C值(缩放系数)
//返回值 :变换后的图像
Mat gammaTransformation(cv::Mat matInput, float fGamma, float fC = 1.0f)
{Mat chRGB[3];Mat matOutput[3];Mat output = matInput.clone();split(matInput, chRGB);for (unsigned char k = 0; k < 3; ++k){//构造输出图像matOutput[k] = cv::Mat::zeros(chRGB[k].rows, chRGB[k].cols, chRGB[k].type());//循环中尽量避免除法float fNormalFactor = 1.0f / 255.0f;for (size_t r = 0; r < chRGB[k].rows; r++){unsigned char* pInput = chRGB[k].data + r * chRGB[k].step[0];unsigned char* pOutput = matOutput[k].data + r * matOutput[k].step[0];for (size_t c = 0; c < chRGB[k].cols; c++){//gamma变换float fOutput = std::pow(pInput[c] * fNormalFactor, fGamma) * fC;//数值溢出判断fOutput = fOutput > 1.0f ? 1.0f : fOutput;//输出pOutput[c] = static_cast<unsigned char>(fOutput * 255.0f);}}}merge(matOutput, 3, output);return output;
}int main(int argc, char * argv[])
{string GammaPic = "Gamma=";float Gamma = 2;Mat Image = imread("D:\\Work\\OpenCV\\Workplace\\Test_1\\1.jpg");imshow("原图", Image);imshow(GammaPic + to_string(Gamma) + "变换后", gammaTransformation(Image, Gamma));waitKey(0);return 0;
}

【机器视觉学习笔记】伽马变换(C++)相关推荐

  1. 【机器视觉学习笔记】Hough变换直线检测(C++)

    目录 源码 效果 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文源码摘自OpenCV2马拉松第22圈--Hough变换直线检测原理与实现 源 ...

  2. 数字图像处理学习笔记(四)点处理:灰度值反转、对数变换、伽马变换

    实验截图: 灰度值反转: 对数变换(进行对数变换不同量级的结果): 伽马变换(伽马变换量级为0.4和1.4时): 实验代码: 灰度值反转(1): img1 = imread('shadow.PNG') ...

  3. OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)

    人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力.FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台.每周免费提供 ...

  4. [Python图像处理] 十六.图像的灰度非线性变换之对数变换、伽马变换

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  5. 【OpenCV 例程200篇】44. 图像的灰度变换(伽马变换)

    [OpenCV 例程200篇]44. 图像的灰度变换(伽马变换) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 线性 ...

  6. 在OpenCV里实现伽马变换

    在前面学习了图像的线性变换,接着下来介绍常用图像非线性变换-伽马变换(Gamma变换).Gamma变换是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: 这个指数即为Ga ...

  7. 数字图像处理-python基于opencv代码实现 反转变换、对数变换和幂律(伽马)变换

    本文主要介绍对<数字图像处理>第三章书中示例图片实现 反转变换.对数变换以及伽马变换的代码 若要获取更多数字图像处理,python,深度学习,机器学习,计算机视觉等高清PDF以及 更多有意 ...

  8. 图像的常用灰度变换——负片、伽马变换、对数变换、直方图均衡化、自适应灰度变换及其MATLAB实现

    灰度变换是图像预处理的重要手段,常见的变换方法如下,图文并茂和大家一起学习: %% 尝试灰度变换--伽马变换和对数变换.直方图均衡化clc,clear,close allf = imread('C:\ ...

  9. 机器视觉学习笔记(4)——单目摄像机标定参数说明

    机器视觉学习笔记(4)--单目摄像机标定参数说明 标签: 机器视觉 1.针孔摄像机模型 在介绍摄像机标定参数之前,需要先简单说一下针孔摄像机的原理.投影平面到小孔的距离为焦距f,物体到小孔的距离为Z, ...

最新文章

  1. 「镁客早报」人类首次在太空3D打印生物器官;中国学者研制出高性能低成本的电解“水制氢”催化剂...
  2. css 控制li点与文字的距离
  3. wxWidgets:wxFontMapper类用法
  4. 音视频技术开发周刊 | 162
  5. HDU 4864 Task(贪心或高斯消元)
  6. Iptables-Fail2ban处理bind 非法***
  7. js视频html代码,html+JS刷图实现视频效果(示例代码)
  8. Java 文件操作-RandomAccessFile
  9. 杭电4535吉哥系列故事——礼尚往来
  10. CentOS 6.5源码编译安装MySQL 5.6
  11. SAP MM GR/IR Account Maintenance的DEMO
  12. 《剑指offer》面试题6——重构二叉树——已知 前序遍历和中序遍历,求后序遍历(C++)
  13. Ubuntu 12.04 下安装 Eclipse
  14. C++中编译速度与平时代码规范
  15. DLP迈向NG DLP的进化之路
  16. LODOP打印控件使用问题总结
  17. 互联网医院系统软件开发|互联网医院管理系统开发的好处
  18. 银行家算法原理及代码实现
  19. 找玩具 概率 dfs
  20. 小芳同学的错题总结(十四)

热门文章

  1. 用模版实现简单的内存池
  2. mint mvc文件上传功能——使用篇
  3. 18款 非常实用 jquery幻灯片图片切换
  4. C#操作XmlDocument对象 报缺少根节点 一一道来
  5. Wamp5 配置PHP 图文详解(转)
  6. '800a0005' 图片上传出现写入文件失败的错误 -- 修改pload_5xsoft.inc
  7. Android实现3D旋转效果
  8. leetcode 134. 加油站
  9. 移动应用程序和网页应用程序_如何开发感觉像本机移动应用程序的渐进式Web应用程序...
  10. 使您的Java代码闻起来很新鲜