直方图累计

xiaoxiao2025-04-20  18

#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/opencv.hpp" #include "opencv2/core/core.hpp" #include <stdio.h> #include <string> using namespace std; using namespace cv; int main() { cv::Mat srcImage = cv::imread("F:\\processImage\\Baboon.bmp"); if (srcImage.empty()) { return -1; } cv::imshow("原图像", srcImage); //转换为灰度图 cv::Mat srcGray; cv::cvtColor(srcImage, srcGray, CV_RGB2GRAY); //计算图像直方图 const int channels[1] = { 0 }; const int histSize[1] = { 256 }; float hranges[2] = { 0, 255 }; const float* ranges[1] = { hranges }; cv::MatND hist; cv::calcHist(&srcGray, 1, channels, cv::Mat(), hist, 1, histSize, ranges); float table[256]; int nPix = srcGray.cols * srcGray.rows; //建立映射表 for (int i = 0; i < 256; i++) { float temp[256]; //像素变换 temp[i] = hist.at<float>(i) / nPix * 255; if (i != 0) { //像素累计 table[i] = table[i - 1] + temp[i]; } else{ table[i] = temp[i]; } } //通过映射表查找 cv::Mat lookUpTable(cv::Size(1, 256), CV_8U); for (int i = 0; i < 256; i++) { lookUpTable.at<uchar>(i) = static_cast<uchar>(table[i]); } cv::Mat histTransResult; cv::LUT(srcGray, lookUpTable, histTransResult); cv::imshow("histTransResult", histTransResult); cv::waitKey(0); return 0; }
转载请注明原文地址: https://www.6miu.com/read-5028713.html

最新回复(0)