opencv-equalizeHist均衡化直方图-增强对比度
直方图均衡化是一种常见的增强图像对比度的方法,使用该方法可以增强局部图像的对比度,尤其在数据较为相似的图像中作用更加明显
直方图是什么:
- 直方图是图像中像素强度分布的图形表达方式.
- 它统计了每一个强度值所具有的像素个数.
直方图均衡化是什么:
- 直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法.
注意: 直方图均衡化只能处理单通道
灰度单通道
1.png
#include<opencv2/opencv.hpp> #include<iostream> int main(int argc, char** argv) { cv::Mat src = cv::imread("D:/bb/tu/1.png"); imshow("src", src); cv::Mat gray, dst; cvtColor(src, gray, cv::COLOR_BGR2GRAY); equalizeHist(gray, dst);//直方图均衡化 imshow("dst", dst); cv::waitKey(0); return 0; }
彩色图方法一
对BGR三个通道分别处理,再合并
#include<opencv2/opencv.hpp> #include<iostream> int main(int argc, char** argv) { cv::Mat src = cv::imread("D:/bb/tu/1.png"); imshow("src", src); std::vector<cv::Mat> chan; cv::split(src, chan);//通道分割 cv::Mat blue, green, red,dst; blue = chan.at(0); green= chan.at(1); red= chan.at(2); //对BGR通道分别做直方图均衡化 equalizeHist(blue, blue); equalizeHist(green, green); equalizeHist(red, red); merge(chan, dst);//合并通道 imshow("dst", dst); cv::waitKey(0); return 0; }
彩色图方法二
通过对HSV色彩空间的V通道进行直方图均衡化,再合并H,S,V三个通道后转化为BGR图像
V通道简单来说就是图像明暗通道
HSV颜色模型:看 https://baike.baidu.com/item/HSV/547122?fr=aladdin
#include<opencv2/opencv.hpp> #include<iostream> int main(int argc, char** argv) { cv::Mat src = cv::imread("D:/bb/tu/1.png"); imshow("src", src); cv::Mat hsv,v,dst; cv::cvtColor(src,hsv, cv::COLOR_BGR2HSV);//转化为HSV图像 std::vector<cv::Mat> chan; cv::split(hsv, chan);//通道分割 equalizeHist(chan.at(2), chan.at(2));//对v通道直方图均衡化 merge(chan, dst);//合并通道 cv::cvtColor(dst, dst, cv::COLOR_HSV2BGR);//HSV转化为BGR图像 imshow("dst", dst); cv::waitKey(0); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2020-12-21 Arduino--红外接收模块