opencv直方图拉伸
Opencv 直方图 拉伸
2023-09-11 14:20:44 时间
1、首先计算出一幅图像的直方图
//计算直方图 cv::MatND ImageHist::getHist(const cv::Mat &image){ cv::Mat im; if(image.channels() == 3) cv::cvtColor(image,im,CV_RGB2GRAY,0); else im = image; float r[2]; r[0] = 0; r[1] = 255; const float *ranges[1]; ranges[0] = r; cv::calcHist(&im, 1, &channels, cv::Mat(), hist, 1, &histSize, ranges); return hist; } //将直方图生成图像,以便在MFC空间中显示 cv::Mat ImageHist::getHistImage(const cv::Mat &image){ double maxVal = 0; double minVal = 0; cv::minMaxLoc(hist,&minVal,&maxVal,0,0); cv::Mat histImg(histSize,histSize,CV_8U,cv::Scalar(255)); int high = histSize * 0.9; for (int i = 0;i < histSize;++i) { float binVal = hist.at<float>(i); int inted = binVal / maxVal *high; cv::line(histImg, cv::Point(i,histSize), cv::Point(i,histSize - inted), cv::Scalar::all(0)); } return histImg; }
2、去掉直方图两端bin为0或者小于某一数量的bin并记录去掉后两端的灰度值(mini,maxi),然后利用以下公式对颜色查找表进行拉伸:
(i - mini) * 255 / (maxi - mini) + 0.5
cv::Mat ImageHist::stretch(const cv::Mat &image,int minValue /* = 0 */){ int mini = 0; for (;mini < histSize;++mini) { if(hist.at<float>(mini) > minValue) break; } int maxi = histSize - 1; for (;maxi >= 0;--maxi) { if(hist.at<float>(maxi) > minValue) break; } cv::Mat lookup(1,256,CV_8U); for (int i = 0;i < histSize;++i) { if(i < mini) lookup.at<uchar>(i) = 0; else if(i > maxi) lookup.at<uchar>(i) = 255; else lookup.at<uchar>(i) =static_cast<uchar>((i - mini) * 255 / (maxi - mini) + 0.5); } cv::Mat result; cv::LUT(image,lookup,result); return result; }
结果:
相关文章
- Python-OpenCV快速教程
- Android版OpenCV图像处理技术亲自验证[三十一]之图像简单阈值操作(附源码)
- OpenCV每日函数 直方图相关(2)
- OpenCV每日函数 直方图相关(1)
- OpenCV每日函数 Object Detection目标检测模块 (2) 定向梯度直方图(HOG)描述符
- Opencv学习笔记 在OpenCV中使用Mask R-CNN
- 【OpenCV-Python】教程:3-10 直方图(4)直方图反向投影
- 【OpenCV-Python】教程:3-10 直方图(3)2D直方图
- 【OpenCV-Python】教程:9-1 级联分类器
- Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)最强详细攻略
- OpenCV手写像素取反
- OpenCV像素取反
- OpenCV直方图均衡化
- OpenCV 直方图均衡化原理
- 【python下使用OpenCV实现计算机视觉读书笔记4】保存摄像头视频
- yolov4视频目标检测:使用C++版本联合CUDA11.2的OpenCV 5.x编译生成opencv-python==5.x进行推理
- opencv 通过颜色提取显示屏数字
- 在OpenCV里使用相机校准
- 在OpenCV里实现直方图反向投影算法
- 在OpenCV里实现灰度直方图1
- 在OpenCV里实现灰度直方图3
- 在OpenCV里实现直方图正规化变换
- Opencv项目实战:01 文字检测OCR(2)
- 【OpenCV 例程200篇】93. 噪声模型的直方图
- 【youcans 的 OpenCV 例程200篇】178.图像分割之 GrabCut 图割法(框选前景)
- Python-OpenCV图像处理-10-直方图的操作
- opencv-python视频处理之录制视频