模糊算法增强图片对比度
昨天看到一个模糊算法介绍,感觉挺有趣的正好用到就实验了一下
很多概念都是模糊的,如果把像素的概念模糊化,有时候可以这种模糊解决很多实际问题,比如增强图片对比度
让黑的更黑亮的更亮灰的微处理
但是这个局限性有点大,适合处理对比度不大的图片
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
Mat img;
float* findValue(float intensity) {float* value = new float[3];if (intensity <= 0.27) {value[0] = 1.0; //黑}if (intensity >= 0.5) {value[0] = 0.0;}else {value[0] = (0.5 - intensity) / (0.22);}if (intensity >= 0.72) {value[1] = 1.0; //白}if (intensity <= 0.5) {value[1] = 0;}else {value[1] = (intensity - 0.5) / 0.22;}if (intensity >= 0.72) {value[2] = 0.0; //灰}if (intensity <= 0.27) {value[2] = 0.0;}if (intensity <= 0.5) {value[2] = (intensity - 0.27) / 0.22;}else {value[2] = (0.72 - intensity) / 0.22;}return value;
}void dealValue() {float* value = new float[3];for (int i = 0; i < img.rows; i++) {float* pr = img.ptr<float>(i);for (int j = 0; j < img.cols; j++) {for (int k = 0; k < 3; k++) {value = findValue(pr[j * 3 + k]); pr[j * 3 + k] = ((value[0] * 0) + (value[2] * 0.5) + (value[1] * 1)) / (value[0] + value[1] + value[2]);}}}delete[]value;
}void histogramcalculation(const Mat & img, Mat & histoImage)
{int histSize = 255;float range[] = { 0,256 }; const float* histRange = { range };bool uniform = true;bool accumulate = false;Mat b_hist, g_hist, r_hist;vector<Mat> bgr_channels;split(img, bgr_channels); calcHist(&bgr_channels[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate); calcHist(&bgr_channels[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate);calcHist(&bgr_channels[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate);int hist_w = 600, hist_h = 400; int bin_w = cvRound((double)hist_w / histSize); Mat histImage(hist_h, hist_w, CV_8UC3, Scalar(120, 55, 133)); normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat()); normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());for (int i = 1; i < histSize; i++) { line(histImage, Point(bin_w*(i - 1), hist_h - cvRound(b_hist.at<float>(i - 1))), Point(bin_w*i, hist_h - cvRound(b_hist.at<float>(i))), Scalar(255, 0, 0), 2);line(histImage, Point(bin_w*(i - 1), hist_h - cvRound(g_hist.at<float>(i - 1))), Point(bin_w*i, hist_h - cvRound(g_hist.at<float>(i))), Scalar(0, 255, 0), 2);line(histImage, Point(bin_w*(i - 1), hist_h - cvRound(r_hist.at<float>(i - 1))), Point(bin_w*i, hist_h - cvRound(r_hist.at<float>(i))), Scalar(0, 0, 255), 2);}histoImage = histImage;
}int main() {img = imread("D://图片//999.jpg");if (img.empty()) {return -1;}Mat result1(img.size(), img.type());Mat result2(img.size(), img.type());imshow("org", img);histogramcalculation(img, result1);imshow("result1", result1);img.convertTo(img, CV_32F, 1 / 255.0);// int num = 30;
// while (num--) {dealValue();//}img.convertTo(img, CV_32F, 255.0);histogramcalculation(img, result2);imshow("result2", result2);img.convertTo(img, CV_8U);imshow("result", img);waitKey(0);return 0;
}
对比强的图片效果:
可以看出虽然图片均衡了,但是质量变差了
对比度不好的:
因为我处理范例图片时不是对比度,所以效果不是那么明显
模糊算法增强图片对比度相关推荐
- AI PNG Enlarger (AI图片放大工具) - 用深度学习AI算法放大图片,不模糊并保持透明度
大家通常放大一个图片,无论是将尺寸放大还是在浏览过程中用放大镜工具时,都会发现放大了的图片会变模糊甚至出现马赛克状.有没有办法将图片放大还保持清晰度呢? AI PNG Enlarger是一款免费的Wi ...
- php 图片模糊处理,PHP实例:php使用高斯算法实现图片的模糊处理功能示例
<PHP实例:php使用高斯算法实现图片的模糊处理功能示例>要点: 本文介绍了PHP实例:php使用高斯算法实现图片的模糊处理功能示例,希望对您有用.如果有疑问,可以联系我们. 本文实例讲 ...
- java实现图像对比度增强_java图片对比度调整示例代码
java图片对比度调整示例代码 发布于 2020-12-31| 复制链接 摘记: 前言本文主要给大家介绍了关于java图片对比度调整的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍 ...
- Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCV实现图像的直方图算法增强(C++)
Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCV实现图像的直方图算法增强(C++) Baumer工业相机 Baumer工业相机使用图像算法增加图像的技术背景 Baumer工业相机 ...
- 数据增强-亮度-对比度-色彩饱和度-色调-锐度 不改变图像大小
https://www.cnblogs.com/yanghailin/p/11106480.html # coding=utf-8 import os import os import cv2 imp ...
- 图像调整亮度饱和度 c语言,数据增强-亮度-对比度-色彩饱和度-色调-锐度 不改变图像大小...
# coding=utf-8 import os import os import cv2 import math import numpy as np from PIL import Image f ...
- NIMA 算法测试图片清晰度
NIMA 算法测试图片清晰度 简介 该算法从两个不同的维度进行判断.首先是判断照片的质量等. 美观等主观方面,该算法也可以用来判断拍照水平.摄影爱好者可以用来提高自己的摄影水平. 如何检测图片 NIM ...
- LBP算法提取图片纹理特征图
LBP算法提取图片纹理特征图 一.项目目标 采用LBP算法提取图片的纹理特征图. 二.LBP算法原理 LBP指局部二值模式,英文全称:Local Binary Patterns.最初功能为辅助图像局部 ...
- java图像增强_java图片对比度调整示例代码
前言 本文主要给大家介绍了关于java图片对比度调整的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法如下 测试代码 public static void main(Stri ...
最新文章
- Xcode_7_GM_seed.dmg下载
- 信息检索导论的课件——http://home.ustc.edu.cn/~zhufengx/ir/pdf/
- 使用Xcode和Instruments调试解决iOS内存泄露
- python中name没有定义_python中__name__的使用
- 面向对象命名空间、组合
- 关于c#:Filter Serilog日志取决于上下文源到不同的接收器?
- cocos2dx 3.0 windows平台 中文乱码解决
- C语言课后习题(59)
- 我是如何查找RFC官方资料的
- STL之multiset简介
- Spring DI如何给对象赋空值 以及 对 “” null 空值的总结
- 自动化测试项目实战训练【广州8月】
- 《当我谈跑步时我谈些什么》:痛苦难以避免,而磨难可以选择
- xilinx FPGA IOB约束使用以及注意事项
- 实验二、电阻变化时二极管的直流电压和交流电流的变化
- Python最佳学习路线图
- vue watch监听数据解决新旧值一样的问题(newValue, oldValue)
- 脉冲神经网络原理及应用,脉冲神经网络结构特点
- 计算机与护理信息学,迎接信息时代的挑战——护理信息学的兴起与发展
- 。ThinkPad T60评测 彻底替代T43