opencv 小任务3 灰度直方图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv 小任务3 灰度直方图相关的知识,希望对你有一定的参考价值。
#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> using namespace cv; using namespace std; int main() { Mat srcImage = imread("F://19.jpg"); imshow("原图", srcImage); if (!srcImage.data) { cout << "fail to load image" << endl; return 0; } MatND dstHist;//得到的直方图 int dims = 1;//得到的直方图的维数 灰度图的维数为1 float hranges[2] = { 0, 255 }; const float *ranges[1] = { hranges }; // 这里需要为const类型,二维数组用来指出每个区间的范围 int size = 256;//直方图横坐标的区间数 即横坐标被分成256份 int channels = 0;//图像得通道 灰度图的通道数为0 //计算图像的直方图 calcHist(&srcImage, 1, &channels, Mat(), dstHist, dims, &size, ranges); int scale = 1; Mat dstImage(size * scale, size, CV_8U, Scalar(0)); //获取最大值和最小值 double minValue = 0; double maxValue = 0; minMaxLoc(dstHist, &minValue, &maxValue, 0, 0); //找到直方图中的最大值和最小值 //绘制出直方图 int hpt = saturate_cast<int>(0.9 * size);//防止溢出 for (int i = 0; i < 256; i++) { float binValue = dstHist.at<float>(i); int realValue = saturate_cast<int>(binValue * hpt / maxValue); line(dstImage, Point(i*scale, size - 1), Point((i + 1)*scale - 1, size - realValue), Scalar(255)); } imshow("一维直方图", dstImage); waitKey(0); return 0; }
以上是关于opencv 小任务3 灰度直方图的主要内容,如果未能解决你的问题,请参考以下文章