2012-11-30 85 views
1

我正在使用64位和32位兩個Windows操作系統測試以下代碼。兩個機器已經從Unofficial Windows Binaries for Python Extension PackagesPython 2.7和OpenCV使用64bit和32bit的不同結果,可能的bug?

opencv-python-2.4.3.win32-py2.7.‌exe = 32 bit 
opencv-python-2.4.3.win-amd64-py2.7.‌exe = 64 bit 

64位結果擬合橢圓安裝了Python 2.7和OpenCV的是

(center, size, angle) 
((560030.1875, 6362089.0), (21.186540603637695, 56.54529571533203), 176.27346801757812) 

32位結果擬合的橢圓是

(center, size, angle) 
((560030.625, 6362066.5), (10.480490684509277, 17.20206642150879), 144.34889221191406) 

我用於測試的代碼如下:

import numpy as np 
import cv 

points = [(560036.4495758876, 6362071.890493258), 
(560036.4495758876, 6362070.890493258), 
(560036.9495758876, 6362070.890493258), 
(560036.9495758876, 6362070.390493258), 
(560037.4495758876, 6362070.390493258), 
(560037.4495758876, 6362064.890493258), 
(560036.4495758876, 6362064.890493258), 
(560036.4495758876, 6362063.390493258), 
(560035.4495758876, 6362063.390493258), 
(560035.4495758876, 6362062.390493258), 
(560034.9495758876, 6362062.390493258), 
(560034.9495758876, 6362061.390493258), 
(560032.9495758876, 6362061.390493258), 
(560032.9495758876, 6362061.890493258), 
(560030.4495758876, 6362061.890493258), 
(560030.4495758876, 6362061.390493258), 
(560029.9495758876, 6362061.390493258), 
(560029.9495758876, 6362060.390493258), 
(560029.4495758876, 6362060.390493258), 
(560029.4495758876, 6362059.890493258), 
(560028.9495758876, 6362059.890493258), 
(560028.9495758876, 6362059.390493258), 
(560028.4495758876, 6362059.390493258), 
(560028.4495758876, 6362058.890493258), 
(560027.4495758876, 6362058.890493258), 
(560027.4495758876, 6362058.390493258), 
(560026.9495758876, 6362058.390493258), 
(560026.9495758876, 6362057.890493258), 
(560025.4495758876, 6362057.890493258), 
(560025.4495758876, 6362057.390493258), 
(560023.4495758876, 6362057.390493258), 
(560023.4495758876, 6362060.390493258), 
(560023.9495758876, 6362060.390493258), 
(560023.9495758876, 6362061.890493258), 
(560024.4495758876, 6362061.890493258), 
(560024.4495758876, 6362063.390493258), 
(560024.9495758876, 6362063.390493258), 
(560024.9495758876, 6362064.390493258), 
(560025.4495758876, 6362064.390493258), 
(560025.4495758876, 6362065.390493258), 
(560025.9495758876, 6362065.390493258), 
(560025.9495758876, 6362065.890493258), 
(560026.4495758876, 6362065.890493258), 
(560026.4495758876, 6362066.890493258), 
(560026.9495758876, 6362066.890493258), 
(560026.9495758876, 6362068.390493258), 
(560027.4495758876, 6362068.390493258), 
(560027.4495758876, 6362068.890493258), 
(560027.9495758876, 6362068.890493258), 
(560027.9495758876, 6362069.390493258), 
(560028.4495758876, 6362069.390493258), 
(560028.4495758876, 6362069.890493258), 
(560033.4495758876, 6362069.890493258), 
(560033.4495758876, 6362070.390493258), 
(560033.9495758876, 6362070.390493258), 
(560033.9495758876, 6362070.890493258), 
(560034.4495758876, 6362070.890493258), 
(560034.4495758876, 6362071.390493258), 
(560034.9495758876, 6362071.390493258), 
(560034.9495758876, 6362071.890493258), 
(560036.4495758876, 6362071.890493258)] 

x = np.array(points)[:,0] 
y = np.array(points)[:,1] 

PointArray2D32f = cv.CreateMat(1, len(points), cv.CV_32FC2) 
for (i, (x, y)) in enumerate(points): 
    PointArray2D32f[0, i] = (x, y) 
    # Fits ellipse to current contour. 
    (center, size, angle) = cv.FitEllipse2(PointArray2D32f) 

print (center, size, angle) 

回答

2

擬合橢圓通常由一個隨機過程來完成,因爲有這麼多的自由度。您可能會看到不同的結果,因爲該算法不是確定性的。

OpenCV用來擬合橢圓的算法是Randomized Hough Transform

+1

親愛的克里斯。關於「隨機過程」,如果我在32位或64位上運行多次,我總是得到一些值。 –

+1

感謝您在Wiki上的鏈接,它可能是算法 – Chris

+0

使用的隨機種子。但爲什麼如果我在我的機器上運行積分值(64位),我總是(21.186540603637695,56.54529571533203),如果我運行在32位,我總是(10.480490684509277,17.20206642150879)? –

相關問題