2015-11-26 3 views
0

У меня проблема, связанная с процессом нормализации во время проекта OpenCV. Функция, которую я должен использовать, называется cvNormalizeHist, однако я не знаю, как ее использовать непосредственно в коде.Нормализация гистограммы в OPENCV

C: void cvNormalizeHist(CvHistogram* hist, double factor) 

Parameters: 
    hist – Pointer to the histogram. 
    factor – Normalization factor. 

The function normalizes the histogram bins by scaling them so that the sum of the bins becomes equal to factor. 

То, что я пытаюсь сделать что-то вроде:

#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include <iostream> 
#include <stdio.h> 

using namespace std; 
using namespace cv; 

int main(int argc, char** argv) 
{ 
    Mat src, dst; 

    /// Load image 
    src = imread(argv[1], 1); 

    if (!src.data) 
    { 
     return -1; 
    } 

    /// Separate the image in 3 places (B, G and R) 
    vector<Mat> bgr_planes; 
    split(src, bgr_planes); 

    /// Establish the number of bins 
    int histSize = 256; 

    /// Set the ranges (for B,G,R)) 
    float range[] = { 0, 256 }; 
    const float* histRange = { range }; 

    bool uniform = true; 
    bool accumulate = false; 

    Mat b_hist, g_hist, r_hist; 

    /// Compute the histograms: 
    calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate); 
    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); 

    cvNormalizeHist(b_hist, 5); // (1) 

    CvHistogram histogram(); // (2) 
    ... 

    waitKey(0); 

    return 0; 
} 

Я пытаюсь использовать такую ​​функцию, однако ошибка предположить, что мне следует использовать CvHistogram вместо объекта Mat. И я не знаю, как конвертировать между этими объектами.

Любой может дать мне, как я могу это сделать или какие-либо предложения?

Больше информации, которые могут быть полезны: для Windows 10, Visual Studio 2013, OpenCV 3,0

С уважением

ответ

1

Вы должны избегать использования устаревших функций C.

Вы можете использовать normalize, с alpha равно вашему коэффициенту и NORM_L1.

Например:

double factor = 25; 
normalize(b_hist, b_hist, factor, 0, NORM_L1); 

cout << sum(b_hist)[0]; 

Вы видите, что сумма бункеров становится равным фактором.

+0

Однако моему учителю нужна программа тестирования с такой функцией. Любой способ справиться с этим и удовлетворить свои чушь? –

+0

Извините за комментарий выше, однако университетский подход меня разочаровывает с некоторого времени. Это утопия, как социализм. –

+1

Хорошо, у меня нет времени, чтобы обновить ответ с помощью кода _obsolete_. Но вы можете привести пример [здесь] (https://siddhantahuja.wordpress.com/2010/02/19/working-with-histograms-in-opencv-2/) о том, как создать CvHistogram. Затем вы можете применить свою функцию ... – Miki

Смежные вопросы