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

目录

  • 概念
  • 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;
}

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

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

相关文章

soapui自带的webservice实例 MockService

soapui自带的webservice实例 & MockService&#xff1a; http://www.docin.com/p-646423228.html 转载于:https://www.cnblogs.com/preftest/archive/2013/05/09/3070243.html

数据库和数据挖掘领域的会议和期刊

数据库和数据挖掘领域的会议和期刊数据库领域主要专注于数据库系统和数据管理算法&#xff0c;而数据挖掘主要是专注于数据价值分析算法。一、数据库领域的主要会议数据库领域的顶级会议SIGMOD、ICDE、VLDB&#xff0c;下面将对这三大会议进行一下简单介绍。 SIGMOD-----------…

lxml库的基本使用

Python之lxml模块的使用&#xff1a;1. 认识lxml2. lxml中基本使用2.1 安装并导入lxml模块2.2 节点操作&#xff1a;2.3 属性操作&#xff1a;2.4 文本操作2.5 xml文件解析与序列化2.6 lxml命名空间的处理3. 使用lxml解析xml案例4. 使用lxml生成一个xml文件案例&#xff1a;5. …

Linux文件查找之find秘笈

前言Linux的基本特点之一是一切皆文件&#xff0c;在系统管理过程中难免会需要查找特定类型的文件&#xff0c;那么问题来了&#xff1a;如何进行有效且准确的查找呢&#xff1f;本文将对Linux系统中的文件查找工具及用法进行详细讲解。常用工具对比常用的文件查找工具主要有lo…

【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)

目录概念C源码OtsuThreshold主函数效果完整源码平台&#xff1a;Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文所用源码修改自C opencv 图片二值化最佳阈值确定&#xff08;大津法,OTSU算法)——Sharon Liu 概念 Otsu算法&#xff0c;也叫最大类间方差法&#xff0…

HTML 页面源代码布局介绍

此介绍以google首页源代码截图为例&#xff1a; 从上到下依次介绍&#xff1a; 1.<!DOCTYPE html> 此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范。 XHTML规范&#xff1a;必须小写&#xff0c;有开始结束标签&#xff0c;属性也用双引号。 HTML规范&#xff1a;不…

Python对Protobuf进行序列化与反序列化

Python Protobuf1.了解Protobuf&#xff1a;1.1 Protobuf语法介绍&#xff1a;2. Python使用Protobuf&#xff1a;(windows平台上)1.了解Protobuf&#xff1a; 我们在使用protobuf之前首先要了解protobuf&#xff0c;那么什么是protobuf呢&#xff1f; 官方的解释是&#xff…

sql server management studio 查询的临时文件路径

C:\Users\你的登录名称\Documents\SQL Server Management Studio\Backup FilesC:\Users\你的登录名称\AppData\Local\Temp\sql server management studio 非正常关闭时自动保存的路径在sql server management studio 里创建的“新建查询”且没有手动保存的路径转载于:https://w…

Linux下如何自己编译源代码(制作成可以安装的.deb文件)

以tree实用程序&#xff08;以树型结构获取目录树&#xff09;为例&#xff0c;介绍Ubuntu中如何管理源码包&#xff0c;包括查询&#xff0c;获取&#xff0c;编译源码包&#xff0c;直至安装。1&#xff09; 在获取源码包之前&#xff0c;确保在软件源配置文件/etc/apt/sourc…

K210 / Openmv实现 大津法/Otsu最大类间方差法 自适应二值化

目录源码效果平台&#xff1a;K210 固件版本&#xff1a;maixpy_v0.6.2_54_g897214100_openmv_kmodel_v4_with_ide_support.bin OpenMv库自带Otsu算法: 源码 # Otsu.py - By: Royic - 周三 9月 22 2021import sensor, imagesensor.reset() sensor.set_pixformat(sensor.GRAY…

第一章:OpenCV入门

第一章&#xff1a;OpenCV入门 OpenCV是一个开源的计算机视觉库&#xff0c;1999年有英特尔的Gary Bradski启动。OpenCV库由C和C语言编写&#xff0c;涵盖计算机视觉各个领域内的500多个函数&#xff0c;可以在多个操作系统上运行。它旨在提供一个简洁而又高效的接口&#xff…

神奇的vfork

一段神奇的代码在论坛里看到下面一段代码&#xff1a;int createproc();int main(){pid_t pidcreateproc();printf("%d\n", pid);exit(0);}int createproc(){pid_t pid;if(!(pidvfork())) {printf("child proc:%d\n", pid);return pid;}else return -1;}输…

18、Java并发性和多线程-饥饿与公平

以下内容转自http://ifeve.com/starvation-and-fairness/&#xff1a; 如果一个线程因为CPU时间全部被其他线程抢走而得不到CPU运行时间&#xff0c;这种状态被称之为“饥饿”。而该线程被“饥饿致死”正是因为它得不到CPU运行时间的机会。解决饥饿的方案被称之为“公平性”–即…

OpenSceneGraph 3.2 版本修改点

OpenSceneGraph-3.2.0稳定版本发布了&#xff0c;改善了对iOS、Android的支持&#xff0c;支持OpenGL的更多新特性。可以通过 下载版块来进行下载。 OpenSceneGraph 3.2 发布. 版本修改点: 全面对OpenGL ES 1.1 和 2.0 的支持&#xff0c;包括各种扩展。改善QTKit, imageio 以及…

【机器视觉学习笔记】双边滤波算法(C++)

目录源码滤波器主函数效果完整源码平台&#xff1a;Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文所用源码修改自双边滤波(bilateral filter)以及联合双边滤波&#xff08;joint bilateral filter&#xff09;—— flow_specter 源码 滤波器 // 双边滤波 // src…

第二章:图像处理基础

第二章&#xff1a;图像处理基础操作一、图像的基本表示方法&#xff1a;1. 二值图像&#xff1a;2. 灰度图像&#xff1a;3. 彩色图像&#xff1a;二、像素处理&#xff1a;1. 二值图像及灰度图像&#xff1a;2.彩色图像&#xff1a;3. 使用numpy.array访问像素&#xff1a;三…

《Head First设计模式》 读书笔记16 其余的模式(二) 蝇量 解释器 中介者

《Head First设计模式》 读书笔记16 其余的模式&#xff08;二&#xff09; 蝇量 解释器 中介者 蝇量&#xff08;Flyweight Pattern&#xff09; 如想让某个类的一个实例能用来提供许多“虚拟实例”&#xff0c;就使用蝇量模式&#xff08;Flyweight Pattern&#xff09; 。 例…

洛谷P1525 关押罪犯

P1525 关押罪犯 题目描述 S 城现有两座监狱&#xff0c;一共关押着N 名罪犯&#xff0c;编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久&#xff0c;如果客观条件具备则随时可能爆发冲突。我们用“怨气值”&#xff08;一个正整数值&#xff09;来表示…

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

目录源码效果平台&#xff1a;Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文源码摘自OpenCV2马拉松第22圈——Hough变换直线检测原理与实现 源码 #include <opencv2\opencv.hpp> #include <iostream> #include <opencv2\imgproc\types_c.h> #in…

第3章:图像运算

第3章&#xff1a;图像运算one. 图像加法运算&#xff1a;1. 加号运算符"":2. cv2.add()函数&#xff1a;two. 图像加权和&#xff1a;three. 按位逻辑运算&#xff1a;1. 按位与运算&#xff1a;2. 按位或运算&#xff1a;3.按位非运算&#xff1a;4. 按位异或运算&…