簡體   English   中英

Python 2.7 和 OpenCV 使用 64 位和 32 位的不同結果,可能的錯誤?

[英]Python 2.7 and OpenCV different result using 64bit and 32bit, possible bug?

我正在使用兩個 Windows 操作系統測試以下代碼,一個是 64 位,一個是 32 位。 兩台機器都安裝了 Python 2.7 和用於 Python 擴展包的非官方 Windows 二進制文件中的 openCV

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

64 位中,擬合橢圓的結果是

(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)

擬合橢圓通常是通過隨機過程完成的,因為有很多自由度。 您可能會看到不同的結果,因為該算法根本不是確定性的。

OpenCV 用於擬合橢圓的算法是隨機霍夫變換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM