chapter22_均值化

来源:互联网 发布:雨人软件 编辑:程序博客网 时间:2024/06/05 03:57

#include"opencv2/opencv.hpp"#include<iostream>using namespace std;using namespace cv;void main(){//单通道均值化后的对比Mat src = imread("D://1.jpg",0);imshow("原图",src);Mat dstHist1;Mat dstHist2;int dims = 1;float hranges[] = { 0, 256 };const float*ranges []= { hranges };int bins = 256;int channels = 0;calcHist(&src, 1, &channels, Mat(), dstHist1, dims, &bins, ranges);int scale = 1;Mat dstImg(bins*scale, bins * 1, CV_8UC3, Scalar(0));double min;double max;minMaxLoc(dstHist1,&min,&max,0,0);int hpt = saturate_cast<int>(0.9*bins);for (int i = 0; i <bins; i++){float binValue = dstHist1.at<float>(i);int  realVale = saturate_cast<int>(binValue / max*hpt);line(dstImg,Point(i*scale,bins-1),Point(i*scale,bins-1-realVale),Scalar(0,255,0));}imshow("原图均值化后",dstImg);Mat dst;equalizeHist(src, dst);imshow("均值化图像:", dst);calcHist(&dst, 1, &channels, Mat(), dstHist2, dims, &bins, ranges);Mat dstImg2(bins*scale, bins * 1, CV_8UC3, Scalar(0));for (int i = 0; i <bins; i++){float binValue = dstHist2.at<float>(i);int  realVale = saturate_cast<int>(binValue / max*hpt);line(dstImg2, Point(i*scale, bins - 1), Point(i*scale, bins - 1 - realVale), Scalar(0, 255, 0));}imshow("均值化后直方图",dstImg2);waitKey(0);
//三通道均值化合并Mat src = imread("D://1.jpg");imshow("原图", src);vector<Mat> channels;split(src,channels);Mat blueChannel, greenChannel, redChannel, dst;blueChannel = channels.at(0);greenChannel = channels.at(1);redChannel = channels.at(2);equalizeHist(blueChannel,blueChannel);equalizeHist(greenChannel,greenChannel);equalizeHist(redChannel,redChannel);merge(channels,dst);imshow("均值化后图像 ",dst);waitKey(0);