基于C++的图像增强处理

资源下载地址:https://download.csdn.net/download/sheziqiong/86812895
资源下载地址:https://download.csdn.net/download/sheziqiong/86812895
目录
一、 实验内容 1
二、 实现方法 1
1、线性对比度展宽 1

  1. // 线性对比展宽 2
    2、非线性动态范围调整 3
  2. // 非线性动态范围调整 4
    3、灰度直方图均衡化 4
    三、 结果分析 6
    1、线性对比度展宽 7
    2、非线性动态范围调整 8
    3、灰度直方图均衡化 9
    四、 结论与展望 9
    一、实验内容
    在所给代码基础上自己编写C/C++ 子函数实现如下功能:
    1)线性对比度展宽
    2)非线性动态范围调整
    3)灰度直方图均衡化。
    二、实现方法
    1、线性对比度展宽
    算法原理:
    对比度展宽的目的是:通过将亮暗差异(即对比度)扩大,来把人所关心的部分强调出来。
    原理是,进行像素点对点的,灰度级的线性影射。该影射关系通过调整参数,来实现对亮暗差异的扩大。
    实现方法:
    设原图、处理后的结果图的灰度值分别为[f(i,j)]和[g(i,j)];
    要求[g(i,j)]和[f(i,j)]均在[0,255]间变化,但是g的表现效果要优于f。
    因为f和g的取值范围相同,所以通过 抑制 不重要的部分,来 扩展 所关心部分的对比度。
    为了达到上面所提出的目的,原图(横轴上的f(i,j))与处理后图(纵轴上的g(i,j))的灰度影射关系可用下图表示。
    这次实验我完成了线性对比度展宽、非线性动态范围调整、灰度直方图均衡化三个内容,体会到了不同方法对提高图片清晰度之间的效果和差别,这是一件非常有趣且富有意义的事情。
    在实验的过程中,我也遇到了一些困惑,比如对于上一个实验所用的图片,其效果并不是很好,原因在于该图片本身的清晰度就很高,再换了一张图片之后其效果有了明显的改善。其次就是对于一些参数的选取,比如非线性动态范围调整里的c,也会对图像产生影响。
//ReadBitMap
//
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <math.h>

#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef long LONG;

#pragma pack(1) //强制内存以1字节为单位对齐

//位图文件头信息结构定义
//其中不包含文件类型信息(由于结构体的内存结构决定,要是加了的话将不能正确读取文件信息)
typedef struct tagBITMAPFILEHEADER
{
    WORD bfType;
    DWORD bfSize;     //文件大小
    WORD bfReserved1; //保留字,不考虑
    WORD bfReserved2; //保留字,同上
    DWORD bfOffBits;  //实际位图数据的偏移字节数,即前三个部分长度之和
} BITMAPFILEHEADER;

//信息头BITMAPINFOHEADER,也是一个结构,其定义如下:
typedef struct tagBITMAPINFOHEADER
{
    //public:
    DWORD biSize;         //指定此结构体的长度,为40
    LONG biWidth;         //位图宽
    LONG biHeight;        //位图高
    WORD biPlanes;        //平面数,为1
    WORD biBitCount;      //采用颜色位数,可以是1,2,4,8,16,24,新的可以是32
    DWORD biCompression;  //压缩方式,可以是0,1,2,其中0表示不压缩
    DWORD biSizeImage;    //实际位图数据占用的字节数
    LONG biXPelsPerMeter; //X方向分辨率
    LONG biYPelsPerMeter; //Y方向分辨率
    DWORD biClrUsed;      //使用的颜色数,如果为0,则表示默认值(2^颜色位数)
    DWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的
} BITMAPINFOHEADER;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
资源下载地址:https://download.csdn.net/download/sheziqiong/86812895
资源下载地址:https://download.csdn.net/download/sheziqiong/86812895


http://www.niftyadmin.cn/n/679.html

相关文章

基于OpenCV的单目相机标定与三维定位(推广)

相机是产生图像数据的硬件&#xff0c;广泛应用于消费电子、汽车、安防等领域。围绕着相机衍生出一系列的研究与应用领域&#xff0c;包括传统的图像处理和基于深度学习的智能应用等。目前大火的自动驾驶中相机也是重要的硬件组成&#xff0c;如环视用鱼眼相机&#xff0c;adas…

RecyclerView源码浅析

一、概述 通过阅读RecyclerView源码&#xff0c;了解RecyclerView的绘制流程。后期扩充RecyclerVIew的复用机制、动画、滚动处理。 二、角色分工 1.RecyclerView 本质是一个ViewGroup&#xff0c;负责将事务分配给LayoutManager、Recycler等 2.LayoutManager 布局管理者&…

JVM进阶

文章目录 1,JVM的定义1.1,概述1.2,Java编译器1.3,Hotspot VM1.3.1 概述1.3.2 结构1.3.3 生命周期2,Java的内存管理3,垃圾收集器的算法4,垃圾收集器5,性能监控工具6,类加载的机制7,JVM常见问题和解决方案1,JVM的定义 1.1,概述 Java虚拟机(Java Virtual Machine 简…

七万字整理SpringCloud + CloudAlibaba知识点总结笔记

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的spring cloud专栏&#xff0c;在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结&#xff0c;鉴于 看到就是学到、学到就是赚到 精神&#xff0c;这波依然是血赚 ┗|&#xff40;O′|┛ SpringCloud Clou…

什么是JWT及在JAVA中如何使用?

目录 1、为什么使用JWT? 2、JWT 的 格式 3、使用 JWT 就绝对安全 吗&#xff1f; 4、JWT 的 鉴权 流程 5、JWT 入门案例 5.1 引入依赖 5.2 生成Token 5.3 解析Token 5.4 工具类 JSON Web token简称JWT&#xff0c; 是用于对应用程序上的用户进行身份验证的标记。 也就…

【C语言小游戏】详解三子棋,深刻掌握二维数组

前言&#xff1a; 大家好&#xff0c;我是良辰丫&#xff0c;今天带领大家实现一个C语言小游戏&#xff0c;主要运用的知识点为二维数组&#xff0c;希望这篇文章让大家对二维数组有更深刻的认识。 &#x1f49e;看似不起波澜的日复一日&#xff0c;会突然在某一天让人看到坚持…

前端包管理工具之npm、cnpm、yarn

前端包管理工具之npm、cnpm、yarn前端包管理工具之npm、cnpm、yarnnpmcnpmYarn概述安装验证包管理工具的基本使用初始化项目添加依赖更新删除依赖常用命令设置淘宝镜像查看yarn版本信息初始化项目依赖管理管理用户缓存依赖前端包管理工具之npm、cnpm、yarn npm npm是node.js内…

公众号会话控制和获取聊天记录

洛塔服务号回复013获取代码。 功能说明 会话控制&#xff1a;此接口在客服和用户之间创建一个会话&#xff0c;如果该客服和用户会话已存在&#xff0c;则直接返回0。指定的客服帐号必须已经绑定微信号且在线。 获取聊天记录&#xff1a;此接口返回的聊天记录中&#xff0c;…