彩色图像增强opencv
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/dcrmg/article/details/53677739 </div><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"><div class="htmledit_views" id="content_views">
1. 基于直方图均衡化的图像增强
- #include <opencv2/highgui/highgui.hpp>
- #include <opencv2/imgproc/imgproc.hpp>
- #include <iostream>
- using namespace cv;
- int main(int argc, char *argv[])
- {
- Mat image = imread("Test.jpg", 1);
- if (image.empty())
- {
- std::cout << "打开图片失败,请检查" << std::endl;
- return -1;
- }
- imshow("原图像", image);
- Mat imageRGB[3];
- split(image, imageRGB);
- for (int i = 0; i < 3; i++)
- {
- equalizeHist(imageRGB[i], imageRGB[i]);
- }
- merge(imageRGB, 3, image);
- imshow("直方图均衡化图像增强效果", image);
- waitKey();
- return 0;
- }
2. 基于拉普拉斯算子的图像增强
- #include <opencv2/highgui/highgui.hpp>
- #include <opencv2/imgproc/imgproc.hpp>
- #include <iostream>
- using namespace cv;
- int main(int argc, char *argv[])
- {
- Mat image = imread("Test.jpg", 1);
- if (image.empty())
- {
- std::cout << "打开图片失败,请检查" << std::endl;
- return -1;
- }
- imshow("原图像", image);
- Mat imageEnhance;
- Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, 0, 5, 0, 0, -1, 0);
- filter2D(image, imageEnhance, CV_8UC3, kernel);
- imshow("拉普拉斯算子图像增强效果", imageEnhance);
- waitKey();
- return 0;
- }
3. 基于对数Log变换的图像增强
对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的细节,将其高灰度值部分压缩,减少高灰度值部分的细节,从而达到强调图像低灰度部分的目的。变换方法:
对数变换对图像低灰度部分细节增强的功能过可以从对数图上直观理解:
x轴的0.4大约对应了y轴的0.8,即原图上0~0.4的低灰度部分经过对数运算后扩展到0~0.8的部分,而整个0.4~1的高灰度部分被投影到只有0.8~1的区间,这样就达到了扩展和增强低灰度部分,压缩高灰度部分的值的功能。
从上图还可以看到,对于不同的底数,底数越大,对低灰度部分的扩展就越强,对高灰度部分的压缩也就越强。
- #include <opencv2/highgui/highgui.hpp>
- #include <opencv2/imgproc/imgproc.hpp>
- using namespace cv;
- int main(int argc, char *argv[])
- {
- Mat image = imread("Test.jpg");
- Mat imageLog(image.size(), CV_32FC3);
- for (int i = 0; i < image.rows; i++)
- {
- for (int j = 0; j < image.cols; j++)
- {
- imageLog.at<Vec3f>(i, j)[0] = log(1 + image.at<Vec3b>(i, j)[0]);
- imageLog.at<Vec3f>(i, j)[1] = log(1 + image.at<Vec3b>(i, j)[1]);
- imageLog.at<Vec3f>(i, j)[2] = log(1 + image.at<Vec3b>(i, j)[2]);
- }
- }
- //归一化到0~255
- normalize(imageLog, imageLog, 0, 255, CV_MINMAX);
- //转换成8bit图像显示
- convertScaleAbs(imageLog, imageLog);
- imshow("Soure", image);
- imshow("after", imageLog);
- waitKey();
- return 0;
- }
4. 基于伽马变换的图像增强
伽马变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。变换公式就是对原图像上每一个像素值做乘积运算:
伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的,从伽马曲线可以直观理解:
γ值以1为分界,值越小,对图像低灰度部分的扩展作用就越强,值越大,对图像高灰度部分的扩展作用就越强,通过不同的γ值,就可以达到增强低灰度或高灰度部分细节的作用。
伽马变换对于图像对比度偏低,并且整体亮度值偏高(对于于相机过曝)情况下的图像增强效果明显。
- #include <opencv2/highgui/highgui.hpp>
- #include <opencv2/imgproc/imgproc.hpp>
- using namespace cv;
- int main(int argc, char *argv[])
- {
- Mat image = imread("Test.jpg");
- Mat imageGamma(image.size(), CV_32FC3);
- for (int i = 0; i < image.rows; i++)
- {
- for (int j = 0; j < image.cols; j++)
- {
- imageGamma.at<Vec3f>(i, j)[0] = (image.at<Vec3b>(i, j)[0])*(image.at<Vec3b>(i, j)[0])*(image.at<Vec3b>(i, j)[0]);
- imageGamma.at<Vec3f>(i, j)[1] = (image.at<Vec3b>(i, j)[1])*(image.at<Vec3b>(i, j)[1])*(image.at<Vec3b>(i, j)[1]);
- imageGamma.at<Vec3f>(i, j)[2] = (image.at<Vec3b>(i, j)[2])*(image.at<Vec3b>(i, j)[2])*(image.at<Vec3b>(i, j)[2]);
- }
- }
- //归一化到0~255
- normalize(imageGamma, imageGamma, 0, 255, CV_MINMAX);
- //转换成8bit图像显示
- convertScaleAbs(imageGamma, imageGamma);
- imshow("原图", image);
- imshow("伽马变换图像增强效果", imageGamma);
- waitKey();
- return 0;
- }
伽马变换增强前原图像:
彩色图像增强opencv相关推荐
- 冈萨雷斯数字图像处理——彩色图像增强3实例
冈萨雷斯数字图像处理--彩色图像增强3实例 实例一:基于直方图均衡化的彩色图像增强 要处理的图片:fruit.jpg example1.m: clc; RGB=im ...
- 暗光图像增强—opencv(C++)
暗光图像增强-opencv(C++) code1 // An highlighted block #include <opencv2/core/core.hpp> #include < ...
- 【图像增强】HSI+同态滤波彩色图像增强【含Matlab源码 1515期】
⛄一. 图像增强技术简介 1 图像增强 图像增强是对图像的某些特征,如边缘.轮廓.对比度等进行强调或锐化,以便于显示.观察或进一步分析与处理.通过对图像的特定加工,将被处理的图像转化为对具体应用来说视 ...
- 彩色图像增强(限制对比度直方图阈值均衡化)Python,Win10
import cv2 import numpy as np img = cv2.imread("C:\\Users\\dwx\\Desktop\\00312.jpg", 1)img ...
- 彩色图像增强之直方图均衡化
我们要把下面的图像变得清晰一点: 直接上代码: %% 彩色图像的直方图均衡化 clc; RGB=imread('ceshi.png'); %输入彩色图像,得到三维数组 R=RGB(:,:,1); %分 ...
- 【数字图像处理】Matlab实现-图像增强-彩色图像增强(彩虹编码,热金属编码)
伪彩色处理 伪彩色增强:把一幅黑白域图像的不同灰度级映射为一幅彩色图像的技术手段. 伪彩色增强有很多种方法,而下面的增强方法则是使用的空间域灰度级-彩色变换法. 空间域灰度级-彩色变换法:可以将灰度图 ...
- 使用Python,OpenCV转换颜色空间,追踪对象的轨迹
使用Python,OpenCV转换颜色空间,追踪对象的轨迹 1. 效果图 2. 源码 参考 这篇博客可以看作是之前俩篇博客的融合,将介绍如何使用Python,OpenCV转换颜色空间,并利用HSV追踪 ...
- matlab Retinex图像增强算法
Retinex理论在彩色图像增强.图像去雾.彩色图像恢复方面拥有很好的效果,下面介绍一下我对该算法的理解. Retinex理论 Retinex理论始于Land和McCann于20世纪60年代作出的一系 ...
- 【图像处理】彩色图像自适应对比度增强(OpenCV实现)
[fishing-pan:https://blog.csdn.net/u013921430 转载请注明出处] 提到图像增强,第一印象就是直方图均衡与直方图规定化,这是最常见的也是非常有效的全局图像 ...
最新文章
- AI时代,如何缓解CMO的决策焦虑?
- 第十七届智能汽车竞赛-多车编队组入门讲解
- .NET Core 构建跨平台的桌面应用
- matlab复数方程的根,matlab解一元三次方程,得到的都是复数根。
- 配置安全域名https申请免费证书并配置nginx运行环境
- 004-JQuery属性
- maven构建Hibernate项目
- python下载以后在哪找_Python下载要保存到哪
- Android--序列化XML数据
- 201621123053《Java程序设计》第十四周学习笔记文章
- 定义一个内核panic问题
- 苦涩程序员公考上岸之路
- spring boot验证码的实现
- ABC182 E - Akari(扫描)
- 在线直播|是事实还是贩卖焦虑?IT行业也偏爱“小鲜肉”
- c++——dynamic_cast的使用
- Jzoj2197 三核苷酸
- 怎样由标准正态分布得到任意正态分布
- 【渝粤题库】陕西师范大学180210 国际市场营销学 作业
- 在U盘下安装ubuntu系统,从U盘启动Linux系统