2015-06-09 2 views
0

Я хочу сделать извлечение функции из изображения в 3D-гистограмму в цветовом пространстве RGB. У меня есть следующий питона код, который я хочу сделать это под C++:Как сгенерировать гистограмму RGB opencv

hist = cv2.calcHist([image], [0, 1, 2], None, self.bins, [0, 256, 0, 256, 0, 256])   
hist = cv2.normalize(hist) 
return hist.flatten() 

я сделал что-то вроде этого:

float range[] = { 0, 255 } ; 
const float* histRange = { range }; 
int channels[] = {0}; 
cv::calcHist(&image, 1, channels, cv::Mat(), r_hist, 1, &sizeVector[0], &histRange); 
channels[0] = 1; 
cv::calcHist(&image, 1, channels, cv::Mat(), g_hist, 1, &sizeVector[0], &histRange); 
channels[0] = 2; 
cv::calcHist(&image, 1, channels, cv::Mat(), b_hist, 1, &sizeVector[0], &histRange); 

Но потом я обнаружил, что они не совпадают, так как в питоне гистограмме подсчитывается в 3D-формате, как преобразовать код в C++?

ответ

1

Вот пример кода из OpenCV документации:

http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_calculation/histogram_calculation.html#code

Подход здесь сначала разделить три канала, а затем вычислить гистограмму для каждого канала.

Для 3D-гистограммы, обратитесь к этому ответу:

How to access 3D Histogram values in C++ using OpenCV?

+0

кажется, что этот код не может делать то, что я хочу. В python каждая точка будет подсчитываться один раз. Но если я разделил его на три растения и посчитал их один за другим, то каждая точка будет засчитана три раза. – sflee

+0

Вы можете нормализовать гистограммы, поэтому точка, подсчитанная три раза, на самом деле прекрасна. Поскольку каждый пиксель должен иметь все три значения, он не должен вызывать ошибку. – Totoro

+0

Извините, я не понимаю, что вы имеете в виду ~ ~ ~ Я имею в виду, если у меня есть точка, которая принадлежит Bin_ {r} (1) и Bin_ {g} (4) и Bin_ {b} (6). python, у меня будет трехмерная гистограмма, которая подсчитает эту точку в bin [1, 4, 6], например, но если я сделаю это в C++ методом разделения, как я могу объединить результат? – sflee

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