2017-08-03 59 views
1

我計算了顏色圖像上的HOGDescriptor,發現Python和C++,opencv版本,HOG參數和圖像在兩者上都是相同的。 有一個在C++和Python計算上的默認BGR圖像的HOG描述符之間的驚人差異在Python和C++的彩色圖像上計算的描述符差異

First 100 values of BGR HOG Descriptor in C++ First 100 values of BGR HOG Descriptor in Python

再次有,在C++和Python計算上的默認的HOG描述符之間的驚人的差異BGR2RBG圖像。然而,C++似乎遵循推薦的(通過Dalal,Triggs)計算HOG作爲所有三個通道的最大值的方式,BGR和RGB圖像具有相同的HOG描述符這一事實證明了這一點,但Python不會

First 100 values of RGB HOG Descriptor in C++ First 100 values of RGB HOG Descriptor in Python

的圖像的灰度級版本,但是,顯示出類似的(但不相同)描述符值。

First 100 values of GRAY HOG Descriptor in C++ and Python

HOG參數:

cv::HOGDescriptor hogDescriptor; 
hogDescriptor.blockSize = cv::Size(8, 8); 
hogDescriptor.cellSize = cv::Size(4, 4); 
hogDescriptor.blockStride = cv::Size(4, 4); 
hogDescriptor.nbins = 9; 
hogDescriptor.signedGradient = true; 
hogDescriptor.winSize = cv::Size(72, 72); 

我的問題是,爲什麼會出現在C++和Python實現之間如此大的差異,即使Python是隻爲C++版本的包裝?

+1

可能的重複:[用python和C++計算的opencv hog描述符的區別](https://stackoverflow.com/questions/45488186/difference-in-opencv-hog-descriptor-computed-in-python-and-c ),同樣的用戶。 –

+0

@ThomasMatthews。雖然這兩個問題看起來很相似,但它們在計算HOG時提出了不同的問題:opencv在計算同一語言的不同顏色圖像上的HOG時的行爲,以及在不同語言的相同顏色空間中計算HOGs –

+1

說「cv2」Python模塊是「只是一個包裝「是有點虛假。最初的'cv'模塊是,但'cv2'使用numpy類型來計算例如,所以事情總體上會有小的差異(不知道這是否是這裏的實際問題)。 –

回答

0

我找到了灰度圖像的解決方案。 HOG描述符的Python包裝器代碼將gammaCorrection標誌初始化爲False而不是在C++中的True。手動將標誌設置爲True或False都會導致灰度圖像上的C++和Python具有完全相同的值。 enter image description here

但是,問題出現在彩色圖像上。

enter image description here

我最好的猜測是,像gammaCorrection標誌不一致,有類似的Python包裝要的東西。