一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - C/C++ - C++ OpenCV繪制簡(jiǎn)易直方圖DrawHistImg

C++ OpenCV繪制簡(jiǎn)易直方圖DrawHistImg

2022-03-11 13:21翟天保Steven C/C++

本文主要介紹了一個(gè)能繪制簡(jiǎn)易直方圖的簡(jiǎn)單函數(shù)DrawHistImg,可以幫助大家快速掌握繪制的原理,可以根據(jù)自己的創(chuàng)意對(duì)其進(jìn)行改善和補(bǔ)充。需要的朋友可以參考一下

需求說(shuō)明

在對(duì)圖像進(jìn)行處理時(shí),經(jīng)常會(huì)有這類(lèi)需求:想要觀察圖像的直方圖分布,例如灰度圖中0-255區(qū)間數(shù)值的分布情況,從而可以進(jìn)行后續(xù)的操作,如閾值分割二值化、直方圖均衡化等等。本文設(shè)計(jì)了一個(gè)能繪制簡(jiǎn)易直方圖的簡(jiǎn)單函數(shù)DrawHistImg,可以幫助大家快速掌握繪制的原理,可以根據(jù)自己的創(chuàng)意對(duì)其進(jìn)行改善和補(bǔ)充。

下面介紹具體實(shí)現(xiàn)流程。

 

具體流程

1)取圖像的灰度圖,并遍歷統(tǒng)計(jì)0-255各個(gè)灰度值所出現(xiàn)的次數(shù)。

cv::Mat src = imread("test.jpg", 0);
cv::Mat hist = cv::Mat::zeros(1, 256, CV_32FC1);
for (int i = 0; i < src.rows; ++i)
{
	for (int j = 0; j < src.cols; ++j)
	{
		hist.at<float>(0, src.at <uchar>(i, j))++;
	}
}

2)定義直方圖圖像histImage,并初始化一些參數(shù)。其中bins是數(shù)值最大值,即255;scale為每個(gè)灰度值所對(duì)應(yīng)的直方圖寬度;histHeight為直方圖高度最大值,也是直方圖圖像的寬。

cv::Mat histImage = cv::Mat::zeros(540, 1020, CV_8UC1);
const int bins = 255;
int scale = 4;
int histHeight = 540;

3)利用minMaxLoc函數(shù)得出哪個(gè)灰度值的出現(xiàn)次數(shù)最高,為歸一化做準(zhǔn)備。

double maxValue;
cv::Point2i maxLoc;
cv::minMaxLoc(hist, 0, &maxValue, 0, &maxLoc);

4)遍歷hist中每個(gè)灰度值,并根據(jù)其出現(xiàn)次數(shù)繪制直方圖,height是歸一化后的高度。

for (int i = 0; i < bins; i++)
{
	float binValue = (hist.at<float>(i));
	int height = cvRound(binValue * histHeight / maxValue);
	cv::rectangle(histImage, cv::Point(i * scale, histHeight),
		cv::Point((i + 1) * scale - 1, histHeight - height), cv::Scalar(255), -1);

}

5)函數(shù)執(zhí)行完畢。 

 

功能函數(shù)

// 繪制簡(jiǎn)易直方圖
cv::Mat DrawHistImg(cv::Mat &src)
{
	cv::Mat hist = cv::Mat::zeros(1, 256, CV_32FC1);
	for (int i = 0; i < src.rows; ++i)
	{
		for (int j = 0; j < src.cols; ++j)
		{
			hist.at<float>(0, src.at <uchar>(i, j))++;
		}
	}
	cv::Mat histImage = cv::Mat::zeros(540, 1020, CV_8UC1);
	const int bins = 255;
	double maxValue;
	cv::Point2i maxLoc;
	cv::minMaxLoc(hist, 0, &maxValue, 0, &maxLoc);
	int scale = 4; 
	int histHeight = 540;

	for (int i = 0; i < bins; i++)
	{
		float binValue = (hist.at<float>(i));
		int height = cvRound(binValue * histHeight / maxValue);
		cv::rectangle(histImage, cv::Point(i * scale, histHeight),
			cv::Point((i + 1) * scale - 1, histHeight - height), cv::Scalar(255), -1);

	}
	return histImage;
}

 

C++測(cè)試代碼

#include <iostream>
#include <time.h>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

cv::Mat DrawHistImg(cv::Mat &hist);

int main()
{
	cv::Mat src = imread("test.jpg", 0);

	// 繪制均衡化后直方圖
	cv::Mat hrI = DrawHistImg(src);

	imshow("original", src);
	imshow("hist", hrI);
	waitKey(0);

	return 0;
}


// 繪制簡(jiǎn)易直方圖
cv::Mat DrawHistImg(cv::Mat &src)
{
	cv::Mat hist = cv::Mat::zeros(1, 256, CV_32FC1);
	for (int i = 0; i < src.rows; ++i)
	{
		for (int j = 0; j < src.cols; ++j)
		{
			hist.at<float>(0, src.at <uchar>(i, j))++;
		}
	}
	cv::Mat histImage = cv::Mat::zeros(540, 1020, CV_8UC1);
	const int bins = 255;
	double maxValue;
	cv::Point2i maxLoc;
	cv::minMaxLoc(hist, 0, &maxValue, 0, &maxLoc);
	int scale = 4; 
	int histHeight = 540;

	for (int i = 0; i < bins; i++)
	{
		float binValue = (hist.at<float>(i));
		int height = cvRound(binValue * histHeight / maxValue);
		cv::rectangle(histImage, cv::Point(i * scale, histHeight),
			cv::Point((i + 1) * scale - 1, histHeight - height), cv::Scalar(255), -1);

	}
	return histImage;
}

 

測(cè)試效果

C++ OpenCV繪制簡(jiǎn)易直方圖DrawHistImg

圖1 原圖

C++ OpenCV繪制簡(jiǎn)易直方圖DrawHistImg

圖2 灰度圖

C++ OpenCV繪制簡(jiǎn)易直方圖DrawHistImg

圖3 直方圖

如果函數(shù)有什么可以改進(jìn)完善的地方,非常歡迎大家指出,一同進(jìn)步何樂(lè)而不為呢~

以上就是C++ OpenCV繪制簡(jiǎn)易直方圖DrawHistImg的詳細(xì)內(nèi)容,更多關(guān)于C++ OpenCV繪制直方圖的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://blog.csdn.net/zhaitianbao/article/details/121787523

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲国产日韩成人综合天堂 | 丝袜高跟小说 | 99九九国产精品免费视频 | 亚洲成人免费观看 | 天天爱综合网 | 极品蜜桃臀美女啪啪 | 国产一区二区播放 | 男女啪啪gif | 暖暖影院日本版 | 国产美女亚洲精品久久久综合91 | 无限在线观看免费入口 | 国产男女乱淫真视频全程播放 | 日本偷拍xxxxxxww | 亚洲国产影院 | 日本乱中文字幕系列在线观看 | 我和岳偷长篇小说 | aigao视频 | 色婷婷久久综合中文久久一本` | 从后面撕开老师的丝袜动态图 | 成在线人免费视频一区二区三区 | 欧美日韩国产精品va | 热99re久久精品国产 | 国产成人愉拍免费视频 | 国产精品视频久久 | 奇米影视4444| 欧美草比视频 | 精品久久久久久久久久香蕉 | 亚洲日本va中文字幕 | 午夜想想爱 | 高清不卡一区二区 | 亚洲 欧美 中文字幕 在线 | 免费一级夫妻a | 久久成人国产精品一区二区 | 日本精品一卡二卡≡卡四卡 | 好大好硬好深好爽想要之黄蓉 | 美女吃男生鸡鸡 | 久久久久久久尹人综合网亚洲 | 无码天堂亚洲国产AV久久 | 欧美综合一区二区三区 | 久久re视频精品538在线 | 思思玖玖玖在线精品视频 |