0
我想要從RGB圖像空間中的圖像到3D直方圖進行特徵提取。我有我想這樣做,在C++以下Python代碼:如何通過opencv生成RGB直方圖
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);
但後來我發現,他們不是因爲在Python直方圖相同正在計算基於3D的,如何將代碼轉換爲C++?
看來,這個代碼不能做我想做的。在python中,每個點都會被計算一次。但是,如果我將它分成三個植物並逐一計數,那麼每個點將被計數三次。 – sflee
你可以對直方圖進行歸一化處理,所以計數三次的點實際上很好。由於每個像素必須具有全部三個值,因此不應該導致錯誤。 – Totoro
對不起,我不明白你的意思〜「〜我的意思是如果我有一個點屬於Bin_ {r}(1)和Bin_ {g}(4)和Bin_ {b}(6)。 python代碼,我將有一個3D直方圖,將這個點計入bin [1,4,6],但是如果我通過分割方法在C++中執行此操作,我該如何合併結果? – sflee