Python 2.7 和 OpenCV 使用 64 位和 32 位的不同结果,可能的错误?

标签 python debugging opencv geometry

我正在使用两个 Windows 操作系统测试以下代码,一个在 64 位上,一个在 32 位上。两台机器都安装了 Python 2.7 和来自 Unofficial Windows Binaries for Python Extension Packages 的 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 用于拟合椭圆的算法是 Randomized Hough Transform .

关于Python 2.7 和 OpenCV 使用 64 位和 32 位的不同结果,可能的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13646267/

相关文章:

python - 如何通过 while 循环以 python 方式避免此代码重复?

visual-studio - 如何通过 Visual Studio 调试 Sharepoint 解决方案/功能?

java - 无法阅读简单的递归代码(JAVA)

javascript - 调试 Karma 单元测试

c++ - 鸟瞰opencv c++的透视变换

python - 树莓派 + 摄像头 + 步进电机 + Opencv

python - rio.plot.show 带颜色条?

python - 跟进术语,寻找行动项目

python - 为什么在使用 multipart/form-data 时不能正确发送带有 Unicode 的 POST 名称?

c++ - 将一个矩阵复制到另一个矩阵的子集