繁体   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