Opencv(C++)笔记--直方图均衡化、直方图计算

news/2024/10/25 3:33:11/

目录

1--直方图均衡化

2--直方图计算


1--直方图均衡化

① 简述:

        对图片的对比度进行调整,输入为灰度图像,对亮度进行归一化处理,提高灰度图的对比度;

② Opencv API:

cv::equalizeHist(gray, dst);

③ 代码实例:

# include <opencv2/opencv.hpp>
# include <cstdio>
# include <iostream>int main(int argc, char** argv){cv::Mat src;src = cv::imread("C:/Users/Liujinfu/Desktop/opencv_bilibili/test1.jpg");if (src.empty()){printf("could not load image..\n");return -1;}cv::imshow("input", src);cv::Mat gray, dst;cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);cv::imshow("gray", gray);cv::equalizeHist(gray, dst);cv::imshow("output", dst);cv::waitKey(0);return 0;
}

2--直方图计算

① Opencv API:

void cv::calcHist(const cv::Mat *images, int nimages, const int *channels, cv::InputArray mask, cv::OutputArray hist, int dims, const int *histSize, const float **ranges, bool uniform = true, bool accumulate = false);

参数简要分析:(具体参数解释见Opencv API)

const cv::Mat *images:输入图像
int nimages:输入图像的数目,第一幅图像的通道标号从 0 到 image[0].channels( ) - 1
const int *channels:需要统计的通道 dim
cv::InputArray mask:掩码,大小和 image 一致,其中把需要处理的部分部分指定为 1,不需要处理的部分指定为0,一般设置为 None,表示处理整幅图像;
cv::OutputArray hist:输出的灰度分布数组
int dims:hist 的维度
const int *histSize:hist 的大小,即直方图横坐标的范围
const float **ranges:hist 的范围,即直方图纵坐标的范围
bool uniform = true:是否归一化

② 代码实例:

# include <opencv2/opencv.hpp>
# include <cstdio>
# include <iostream>int main(int argc, char** argv){cv::Mat src;src = cv::imread("C:/Users/Liujinfu/Desktop/opencv_bilibili/test1.jpg");if (src.empty()){printf("could not load image..\n");return -1;}cv::imshow("input", src);// 分通道显示std::vector<cv::Mat> bgr_planes;cv::split(src, bgr_planes);// 计算直方图int histSize = 256;float range[] = {0, 256};const float *histRanges = {range};cv::Mat b_hist, g_hist, r_hist;cv::calcHist(&bgr_planes[0], 1, 0, cv::Mat(), b_hist, 1, &histSize, &histRanges, true, false);cv::calcHist(&bgr_planes[1], 1, 0, cv::Mat(), g_hist, 1, &histSize, &histRanges, true, false);cv::calcHist(&bgr_planes[2], 1, 0, cv::Mat(), r_hist, 1, &histSize, &histRanges, true, false);// 归一化int hist_h = 400;int hist_w = 600;int bin_w = hist_w / histSize;cv::Mat histImage(hist_w, hist_h, CV_8UC3, cv::Scalar(0, 0, 0));cv::normalize(b_hist, b_hist, 0, hist_h, cv::NORM_MINMAX, -1, cv::Mat()); // 归一化到(0, hist_h)cv::normalize(g_hist, g_hist, 0, hist_h, cv::NORM_MINMAX, -1, cv::Mat());cv::normalize(r_hist, r_hist, 0, hist_h, cv::NORM_MINMAX, -1, cv::Mat());// 绘制直方图(直方图坐标和画图坐标不同,画图坐标从左上角开始,即左上角为零点)for(int i = 1; i < histSize; i++){cv::line(histImage, cv::Point((i - 1) * bin_w, hist_h - cvRound(b_hist.at<float>(i - 1))), cv::Point((i)*bin_w, hist_h - cvRound(b_hist.at<float>(i))), cv::Scalar(255, 0, 0), 2, cv::LINE_AA);cv::line(histImage, cv::Point((i - 1) * bin_w, hist_h - cvRound(g_hist.at<float>(i - 1))), cv::Point((i)*bin_w, hist_h - cvRound(g_hist.at<float>(i))), cv::Scalar(0, 255, 0), 2, cv::LINE_AA);cv::line(histImage, cv::Point((i - 1) * bin_w, hist_h - cvRound(r_hist.at<float>(i - 1))), cv::Point((i)*bin_w, hist_h - cvRound(r_hist.at<float>(i))), cv::Scalar(0, 0, 255), 2, cv::LINE_AA);}cv::imshow("output", histImage);cv::waitKey(0);return 0;
}


http://www.ppmy.cn/news/5816.html

相关文章

公开竞价与封闭式竞价有什么不同?

电子竞价是电子采购的一种形式。电子采购是指通过信息和网络系统在线进行的招标采购过程。 电子竞价是指一种基于网络的系统&#xff0c;允许潜在供应商在网上实时竞争商品/服务的价格。电子竞价的使用方式类似于e-bay平台&#xff0c;出价最高者获胜。在建筑业&#xff0c;这…

多期DID和事件研究法含文献和do代码

多期DID和事件研究法含文献和do代码 1、方法&#xff1a;多期DID 2来源&#xff1a;JDE发表的一篇多期DID和事件研究法相关的文章&#xff0c; 文章名为为"Here waits the bride? The effect of Ethiopias child marriage law"。 3、数据内容&#xff1a;数据包…

Huffman二进制编码以及文本的压缩与解压

目录Huffman树转化成二进制编码文本压缩文本解压Huffman树转化成二进制编码 在上一篇博客的末尾&#xff0c;将Huffman树转化成了01 构成的字符串&#xff0c;显然在实际应用中不是这种操作。我们实际想要的是01构成的一串bits&#xff1b;举个例子&#xff1a;字符"A&quo…

Spring Cloud Alibaba Sentinel - - >流控规则初体验

源码地址&#xff1a;https://github.com/alibaba/Sentinel 新手指南&#xff1a;https://github.com/alibaba/Sentinel/wiki/新手指南#公网-demo 官方文档&#xff1a;https://sentinelguard.io/zh-cn/docs/introduction.html 注解支持文档&#xff1a;https://github.com/ali…

Android---Banner轮播图

轮播图是一种很常见的UI。Banner框架能够帮助我们快速开发&#xff0c;完成首页轮播图效果的需求。 1、导入Banner依赖 implementation io.github.youth5201314:banner:2.2.2 2、activity_main.xml布局。 banner_loop_time: 设置轮播间隔时间&#xff0c;默认3000&#xff…

基于注解方式Spring Security忽略拦截

文章目录1.Spring Security忽略拦截配置2.基于配置文件注入2.1.添加配置2.2.修改Spring Security配置类2.3. 测试3.基于注解的方式过滤接口3.1.添加注解3.2.获取所有使用了IgnoreWebSecurity注解的接口访问路径3.3.测试1.Spring Security忽略拦截配置 关于Spring Securite的使…

Flarum部署:从源码到docker到放弃

警告&#xff1a; 此篇文章前半段记录了我用代码部署flarum遇到的一些问题和解决办法&#xff0c;但是可能是由于我是在不熟悉php的框架结构&#xff0c;最终我还是选择了使用docker进行部署&#xff0c;请斟酌是否继续阅读本文。 Hello&#xff0c;大家好&#xff0c;我是内网…

IU酒店释放轻中端投资活力,开启曲靖酒店新篇章

曲靖位于云南省东北部&#xff0c;是云南连接内地的重要陆路通道&#xff0c;素有“滇黔锁钥”、“入滇门户”、“云南咽喉”之称&#xff0c;是仅次于昆明的云南第二大城市。曾入选“中国十佳宜居城市”榜单10次的城市&#xff0c;拥有3000多年的文明史&#xff0c;早在三国魏…