0

Overall goal is to be able to read the histogram from binary image in order to crop the image.

My code works, but for my binary image, histogram is not showing properly (the histogram is blank)

Can anybody tell me whats wrong with my code?

Histogram is working for RGB image as well as Grey image

I would like to be able to get the histogram of the binary image

#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>


using namespace std;
using namespace cv;

void show_histogram(std::string const& name, cv::Mat1b const& image)
{
    // Set histogram bins count
    int bins = 255;
    int histSize[] = { bins };
    // Set ranges for histogram bins
    float lranges[] = { 0, 255 };
    const float* ranges[] = { lranges };
    // create matrix for histogram
    cv::Mat hist;
    int channels[] = { 0 };

    // create matrix for histogram visualization
    int const hist_height = 255;
    cv::Mat1b hist_image = cv::Mat1b::zeros(hist_height, bins);

    cv::calcHist(&image, 1, channels, cv::Mat(), hist, 1, histSize, ranges, true, false);

    double max_val = 0;
    minMaxLoc(hist, 0, &max_val);

    // visualize each bin
    for (int b = 0; b < bins; b++) {
        float const binVal = hist.at<float>(b);
        int   const height = cvRound(binVal*hist_height / max_val);
        cv::line
        (hist_image
            , cv::Point(b, hist_height - height), cv::Point(b, hist_height)
            , cv::Scalar::all(255)
        );
    }
    cv::imshow(name, hist_image);
}


int main()
{
    Mat Rgb;
    Mat Grey;
    Mat Binary;
    //Mat Histogram;

    Rgb = imread("license.jpg", WINDOW_AUTOSIZE);
    cvtColor(Rgb, Grey, cv::COLOR_BGR2GRAY);
    threshold(Grey, Binary, 150, 250, THRESH_BINARY);
    //namedWindow("RGB");
    //namedWindow("Grey");
    namedWindow("Binary");


    //imshow("RGB", Rgb);
    imshow("Gray", Grey);
    imshow("Binary", Binary);
    show_histogram("Histogram1", Grey);
    show_histogram("Histogram2", Binary);

    waitKey(0);
    cv::destroyAllWindows();
    return 0;
}
Karina Turtle
  • 81
  • 1
  • 9

0 Answers0