Я хочу сделать извлечение функции из изображения в 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++?
кажется, что этот код не может делать то, что я хочу. В python каждая точка будет подсчитываться один раз. Но если я разделил его на три растения и посчитал их один за другим, то каждая точка будет засчитана три раза. – sflee
Вы можете нормализовать гистограммы, поэтому точка, подсчитанная три раза, на самом деле прекрасна. Поскольку каждый пиксель должен иметь все три значения, он не должен вызывать ошибку. – Totoro
Извините, я не понимаю, что вы имеете в виду ~ ~ ~ Я имею в виду, если у меня есть точка, которая принадлежит Bin_ {r} (1) и Bin_ {g} (4) и Bin_ {b} (6). python, у меня будет трехмерная гистограмма, которая подсчитает эту точку в bin [1, 4, 6], например, но если я сделаю это в C++ методом разделения, как я могу объединить результат? – sflee