Слияние двух 1d гистограмм в одну - PullRequest
0 голосов
/ 01 мая 2018

Я получил две гистограммы, которые я создал со стандартной openCV функцией calcHist :

int getModels(string filename) {
    Mat src = imread(filename, 1);   
    if(!src.data) { return -1; }
    Mat imageHSV;
    cvtColor(src, imageHSV, COLOR_BGR2HSV);
    vector<Mat> bgr_planes; 
    split(imageHSV, bgr_planes);
    int histSize = 256;
    float range[] = { 0, 256 } ;
    const float* histRange = { range };
    bool uniform = true; bool accumulate = false;
    Mat g_hist, r_hist;
    calcHist( &bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate );
    calcHist( &bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate );
    cv::Mat combined_hist = g_hist + r_hist;
    int hist_w = 512; int hist_h = 400;
    int bin_w = cvRound( (double) hist_w/histSize );
    Mat histImage(hist_h, hist_w, CV_8UC3, Scalar( 0,0,0) );
    for( int i = 0; i < histSize; i++ )
    {
      line( histImage, Point( bin_w*(i-1), cvRound(combined_hist.at<float>(i-1)) ) ,
                       Point( bin_w*(i), cvRound(combined_hist.at<float>(i)) ),
                       Scalar( 19,90,87), 2, 8, 0  );
    }
    /// Display
        namedWindow(filename, CV_WINDOW_AUTOSIZE );
        imshow(filename, histImage );

        return 0;
    }

Есть ли способ объединить их в одну combined_hist гистограмму?

1 Ответ

0 голосов
/ 01 мая 2018

Да, вы можете. OpenCV имеет cv::add, который можно использовать так:

cv::Mat combined_hist;

cv::add(g_hist, r_hist, combined_hist);

Однако, поскольку cv::Mat имеет перегруженные операторы, вы можете просто сделать это:

cv::Mat combined_hist = g_hist + r_hist;

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...