在圖像處理中,灰度直方圖是一種常用的工具,用于表示圖像中像素灰度值的分布情況。通過灰度直方圖,我們可以直觀地了解圖像的亮度分布、對比度等信息。本文將介紹如何使用OpenCV C++庫來繪制灰度直方圖。
首先,確保你已經安裝了OpenCV庫,并且在你的C++項目中正確配置了OpenCV。如果還沒有安裝,可以參考OpenCV的官方文檔進行安裝和配置。
在繪制灰度直方圖之前,我們需要先讀取一張圖像。假設我們有一張名為image.jpg
的灰度圖像,可以使用以下代碼讀取圖像:
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 讀取圖像
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
if (image.empty()) {
std::cerr << "Could not open or find the image!" << std::endl;
return -1;
}
// 顯示原始圖像
cv::imshow("Original Image", image);
cv::waitKey(0);
return 0;
}
接下來,我們需要計算圖像的灰度直方圖。OpenCV提供了cv::calcHist
函數來計算直方圖。以下是計算灰度直方圖的代碼:
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 讀取圖像
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
if (image.empty()) {
std::cerr << "Could not open or find the image!" << std::endl;
return -1;
}
// 定義直方圖參數
int histSize = 256; // 灰度級數
float range[] = {0, 256}; // 灰度范圍
const float* histRange = {range};
bool uniform = true, accumulate = false;
// 計算直方圖
cv::Mat hist;
cv::calcHist(&image, 1, 0, cv::Mat(), hist, 1, &histSize, &histRange, uniform, accumulate);
// 顯示直方圖
int hist_w = 512, hist_h = 400;
int bin_w = cvRound((double) hist_w / histSize);
cv::Mat histImage(hist_h, hist_w, CV_8UC3, cv::Scalar(0, 0, 0));
// 歸一化直方圖
cv::normalize(hist, hist, 0, histImage.rows, cv::NORM_MINMAX, -1, cv::Mat());
// 繪制直方圖
for (int i = 1; i < histSize; i++) {
cv::line(histImage, cv::Point(bin_w * (i - 1), hist_h - cvRound(hist.at<float>(i - 1))),
cv::Point(bin_w * (i), hist_h - cvRound(hist.at<float>(i))),
cv::Scalar(255, 255, 255), 2, 8, 0);
}
// 顯示直方圖
cv::imshow("Histogram", histImage);
cv::waitKey(0);
return 0;
}
cv::imread
函數讀取圖像,并將其轉換為灰度圖像。cv::calcHist
函數計算圖像的灰度直方圖。histSize
表示灰度級數,range
表示灰度范圍。histImage
,并使用cv::line
函數繪制直方圖。直方圖的每個柱子代表一個灰度級,柱子的高度表示該灰度級在圖像中出現的頻率。cv::imshow
函數顯示繪制好的直方圖。運行上述代碼后,你將看到原始圖像和對應的灰度直方圖。直方圖的橫軸表示灰度級,縱軸表示該灰度級在圖像中出現的頻率。
通過本文的介紹,你應該已經掌握了如何使用OpenCV C++繪制灰度直方圖?;叶戎狈綀D是圖像處理中的一個重要工具,能夠幫助我們更好地理解圖像的亮度分布和對比度等信息。希望本文對你有所幫助!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。