溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用opencv C++繪制灰度直方圖

發布時間:2022-05-13 10:02:44 來源:億速云 閱讀:737 作者:iii 欄目:開發技術

怎么用OpenCV C++繪制灰度直方圖

在圖像處理中,灰度直方圖是一種常用的工具,用于表示圖像中像素灰度值的分布情況。通過灰度直方圖,我們可以直觀地了解圖像的亮度分布、對比度等信息。本文將介紹如何使用OpenCV C++庫來繪制灰度直方圖。

1. 準備工作

首先,確保你已經安裝了OpenCV庫,并且在你的C++項目中正確配置了OpenCV。如果還沒有安裝,可以參考OpenCV的官方文檔進行安裝和配置。

2. 讀取圖像

在繪制灰度直方圖之前,我們需要先讀取一張圖像。假設我們有一張名為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;
}

3. 計算灰度直方圖

接下來,我們需要計算圖像的灰度直方圖。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;
}

4. 代碼解析

  • 讀取圖像:使用cv::imread函數讀取圖像,并將其轉換為灰度圖像。
  • 計算直方圖:使用cv::calcHist函數計算圖像的灰度直方圖。histSize表示灰度級數,range表示灰度范圍。
  • 繪制直方圖:創建一個空白圖像histImage,并使用cv::line函數繪制直方圖。直方圖的每個柱子代表一個灰度級,柱子的高度表示該灰度級在圖像中出現的頻率。
  • 顯示直方圖:使用cv::imshow函數顯示繪制好的直方圖。

5. 運行結果

運行上述代碼后,你將看到原始圖像和對應的灰度直方圖。直方圖的橫軸表示灰度級,縱軸表示該灰度級在圖像中出現的頻率。

6. 總結

通過本文的介紹,你應該已經掌握了如何使用OpenCV C++繪制灰度直方圖?;叶戎狈綀D是圖像處理中的一個重要工具,能夠幫助我們更好地理解圖像的亮度分布和對比度等信息。希望本文對你有所幫助!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女