#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream> using namespace std;
using namespace cv;//对数图像增强是图像增强的一种常见方法,其公式为: S = c log(r+1),其中c是常数(以下算法c=255/(log(256)),这样可以实现整个画面的亮度增大。
void LogEnhance(IplImage* img, IplImage* dst)
{// 由于oldPixel:[1,256],则可以先保存一个查找表 uchar lut[256] = { 0 };double temp = 255 / log(256);for (int i = 0; i<255; i++){lut[i] = (uchar)(temp* log(i + 1) + 0.5);}for (int row = 0; row <img->height; row++){uchar *data = (uchar*)img->imageData + row* img->widthStep;uchar *dstData = (uchar*)dst->imageData + row* dst->widthStep;for (int col = 0; col<img->width; col++){for (int k = 0; k<img->nChannels; k++){uchar t1 = data[col*img->nChannels + k];dstData[col*img->nChannels + k] = lut[t1];}}}
}//指数图像增强的表达为:S = cR^r,通过合理的选择c和r可以压缩灰度范围,算法以c=1.0/255.0, r=2实现。
void ExpEnhance(IplImage* img, IplImage* dst)
{// 由于oldPixel:[1,256],则可以先保存一个查找表 uchar lut[256] = { 0 };double temp = 1.0 / 255.0;for (int i = 0; i<255; i++){lut[i] = (uchar)(temp*i*i + 0.5);}for (int row = 0; row <img->height; row++){uchar *data = (uchar*)img->imageData + row* img->widthStep;uchar *dstData = (uchar*)dst->imageData + row* dst->widthStep;for (int col = 0; col<img->width; col++){for (int k = 0; k<img->nChannels; k++){uchar t1 = data[col*img->nChannels + k];dstData[col*img->nChannels + k] = lut[t1];}}}
}// 在日常中有时候保密或其他需要将图像马赛克,下面的算法实现图像马赛克功能(原理:用中心像素来表示邻域像素)。
uchar getPixel(IplImage* img, int row, int col, int k)
{return ((uchar*)img->imageData + row* img->widthStep)[col*img->nChannels + k];
}void setPixel(IplImage* img, int row, int col, int k, uchar val)
{((uchar*)img->imageData + row* img->widthStep)[col*img->nChannels + k] = val;
}// nSize:为尺寸大小,奇数
// 将邻域的值用中心像素的值替换
void Masic(IplImage* img, IplImage* dst, int nSize)
{int offset = (nSize - 1) / 2;for (int row = offset; row <img->height - offset; row = row + offset){for (int col = offset; col<img->width - offset; col = col + offset){int val0 = getPixel(img, row, col, 0);int val1 = getPixel(img, row, col, 1);int val2 = getPixel(img, row, col, 2);for (int m = -offset; m<offset; m++){for (int n = -offset; n<offset; n++){setPixel(dst, row + m, col + n, 0, val0);setPixel(dst, row + m, col + n, 1, val1);setPixel(dst, row + m, col + n, 2, val2);}}}}
}// 对于曝光过度问题,可以通过计算当前图像的反相(255-image),然后取当前图像和反相图像的较小者为当前像素位置的值。
// 过度曝光原理:图像翻转,然后求原图与反图的最小值
void ExporeOver(IplImage* img, IplImage* dst)
{for (int row = 0; row <img->height; row++){uchar *data = (uchar*)img->imageData + row* img->widthStep;uchar *dstData = (uchar*)dst->imageData + row* dst->widthStep;for (int col = 0; col<img->width; col++){for (int k = 0; k<img->nChannels; k++){uchar t1 = data[col*img->nChannels + k];uchar t2 = 255 - t1;dstData[col*img->nChannels + k] = min(t1, t2);}}}
}//高反差保留主要是将图像中颜色、明暗反差较大两部分的交界处保留下来,其表达形式为:dst = r*(img - Blur(img))。
//比如图像中有一个人和一块石头,那么石头的轮廓线和人的轮廓线以及面部、服装等有明显线条的地方会变被保留,而其他大面积无明显明暗变化的地方则生成中灰色。
Mat HighPass(Mat img)
{Mat temp;GaussianBlur(img, temp, Size(7, 7), 1.6, 1.6);int r = 3;Mat diff = img + r*(img - temp); //高反差保留算法 return diff;
}int main(int argc, char* argv[])
{const char* Path = "2.jpg";IplImage *img = cvLoadImage(Path, CV_LOAD_IMAGE_ANYCOLOR);IplImage *dst = cvCreateImage(cvGetSize(img), img->depth, img->nChannels);cout << "输入你要选择的操作:" << endl;cout << "1、曝光过度" << endl;cout << "2、加马赛克" << endl;cout << "3、对数增强" << endl;cout << "4、指数增强" << endl;cout << "请输入你的选择:";int choice = 1;cin >> choice;switch (choice){case 1:ExporeOver(img, dst);   //这四个算法中总觉得某个算法有问题 break;case 2:Masic(img, dst, 21);break;case 3:LogEnhance(img, dst);break;case 4:ExpEnhance(img, dst);break;default:cout << "输入错误" << endl;break;}cvSaveImage("dst.jpg", dst);cvNamedWindow("SRC", 1);cvNamedWindow("DST", 1);cvShowImage("SRC", img);cvShowImage("DST", dst);cvWaitKey();return 0;
}

图像增强(对数,指数,曝光,马赛克)相关推荐

  1. 幂函数在计算机中怎么下,对数指数幂函数模拟计算机.doc

    能计算对数函数.指数函数和幂函数的模拟计算机 在对数函数y=loga x(a>0,a≠1,x>0)中,自变量x和因变量y之间是对数关系,就是a的y次方的计算结果是x.现代模拟电路中,可以使 ...

  2. 复杂函数求导/对数指数幂公式

    指数.对数公式 https://wenku.baidu.com/view/69653d53f01dc281e53af0ba.html 求导公式 https://wenku.baidu.com/view ...

  3. python 计算器 加减乘除 对数指数 三角反三角

    import math import time while 1:a=input("请输入第一个数字(三角运算不输入,对数运算输入真数)")b=input("请输入符号&q ...

  4. OpenCV,马赛克 常用图像增强算法的实现

    import cv2 import numpy as npdef salt(img, img2, n):noff = int((n - 1) / 2)for i in range(noff,img.s ...

  5. Opencv 学习---8种常用图像增强算法

    常见的8种图像增强算法及其opencv实现 1.直方图均衡化 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法.  这种方法通常用来增加许多图像的局部对比度.这种方法对于背景和前景都太 ...

  6. python指数运算_Python标准库——数学运算

    指数和对数 指数生长曲线在经济学.物理学和其他学科中经常出现.Python有一个内置的幂运算符("**"),不过,如果需要将一个可调用函数作为另一个函数的参数,那么困难需要用到po ...

  7. 主流图像边缘检测算法

    前言:最近在学习关于图像边缘检测技术,更新此博文仅为 了记录个人学习过程,也供有共同志趣的朋友参考! 本文内容包括:图像噪声添加与去除.几种滤波算法[高斯滤波,方框滤波,均值滤波,中值滤波,双边滤波, ...

  8. A Bio-Inspired Multi-Exposure Fusion Frameworkfor Low-light Image Enhancement

    Abstract 弱光图像的能见度较低,不利于人类观察和计算机视觉算法.尽管许多图像增强技术已经被提出来解决这个问题,现有的方法不可避免地引入对比度增强不足和过度.受人类视觉系统的启发,我们设计了一个 ...

  9. 使用机器视觉模式识别屏幕

    目的 使用摄像机和识别系统来观察屏幕输出,从而达到警报的作用,也就是使用机器视觉中的模式识别来拒绝人工观察.代替人眼观察. 应用模式识别 模式识别就是通过计算机用数学技术方法来研究模式的自动处理和判读 ...

  10. 睿智的目标检测53——Pytorch搭建YoloX目标检测平台

    睿智的目标检测53--Pytorch搭建YoloX目标检测平台 学习前言 源码下载 YoloX改进的部分(不完全) YoloX实现思路 一.整体结构解析 二.网络结构解析 1.主干网络CSPDarkn ...

最新文章

  1. 10张图带你深入理解Docker容器和镜像--云平台技术栈07
  2. 求大数阶乘(10000以内)
  3. Android笔记——在布局文件中插入另一个布局文件
  4. 推荐一个在线查看.cer文件的网站
  5. 针对IE的CSS hack 全面 实用
  6. JavaScript中call,apply,bind方法的总结。
  7. 计算机音乐 带你去旅行,带你去旅行(全乐器)
  8. 使用 vs 2008 宏制作自动注释工具
  9. 图像处理之全景拼接---基于sift的全景图像拼接
  10. 电脑主机插入耳机无声音
  11. Android Native Crash的log分析和定位
  12. 强化学习学习总结(二)——QLearning算法更新和思维决策
  13. 人工智能数学基础——相关分析
  14. 虹膜数据集_虹膜数据集的聚类分析
  15. php agrs zf2,添加ZF2_PATH environment variable 环境变量
  16. 什么是SAS硬盘,服务器硬盘sas和sata有什么区别
  17. [转帖]联想的股权结构
  18. 基于FPGA的频率计设计
  19. 服务器阵列状态显示verify,VerifyServerName 协议选项 [VERIFY]
  20. c语言采集西门子PLC数据,西门子PLC数据采集

热门文章

  1. 使用WPS邮件合并功能和文档部件插入图片制作准考证
  2. linux 开启bat文件夹,在Linux系统中使用及定制Bat
  3. Excel空值导入mysql_Excel数据导入Sql Server出现Null
  4. C# IE环境 - 重置IE( 注册表)
  5. 集成建行龙支付(2019.01.24更新)
  6. R 编程语言 - 简介
  7. 任正非对姚安娜是劝退式支持吗
  8. 小恐龙游戏python_自动玩Chrome浏览器的小恐龙游戏
  9. Laravel文档梳理9、Blade模板
  10. 自己整理的申论知识体系梳理分享