首页 > 代码库 > opencv 小任务3 灰度直方图
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 = http://www.mamicode.com/0; double maxValue = http://www.mamicode.com/0; minMaxLoc(dstHist, &minValue, &maxValue, 0, 0); //找到直方图中的最大值和最小值 //绘制出直方图 int hpt = saturate_cast<int>(0.9 * size);//防止溢出 for (int i = 0; i < 256; i++) { float binValue = http://www.mamicode.com/dstHist.at<float>(i); int realValue = http://www.mamicode.com/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 灰度直方图
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。