使用Python和OpenCV的德劳内三角剖分

4

我正在尝试使用Python 3.5.2和OpenCV 3.1进行Delaunay三角剖分。我尝试使用函数cv2.cv2.Subdiv2D(rect),但我无法将点添加到Subdiv对象中。我做错了什么?

import numpy as np
import cv2

point = np.array([[1, 1]])
rect = (0, 0, 10, 10)

# Create an instance of Subdiv2D
subdiv = cv2.Subdiv2D(rect[0])
subdiv.insert(point)

出现以下提示信息:

OpenCV错误:在copyTo函数的文件 /Users/jenkins/miniconda/1/x64/conda-bld/work/opencv-3.1.0/modules/core/src/copy.cpp 的第 257 行中,断言失败(channels() == CV_MAT_CN(dtype))。

libc++abi.dylib: 以抛出类型为cv::Exception的未捕获异常终止:/Users/jenkins/miniconda/1/x64/conda-bld/work/opencv-3.1.0/modules/core/src/copy.cpp:257: error: (-215) channels() == CV_MAT_CN(dtype) in function copyTo

进程因信号6(SIGABRT)而被退出,退出码为134。


这里讨论了相同的问题(即,对于cv,它必须是元组而不是列表)。提出的解决方案也是相同的。SystemError: new style getargs format but argument is not a tuple? - My Work
1个回答

2

如果数组中只有一个点,那么我的方法和你的方法没有区别,但是你的方法更好,所以我修改了我的问题。但是它并没有解决我的问题。 - hory
谢谢!终于可以工作了。你是怎么想到这个主意的?我一直以为元组和列表之间唯一的区别就是列表是动态的。 - hory
1
我发现Python的OpenCV文档有点不足,所以我自己进行了测试。列表是动态的,你说得对。但是请注意,我的解决方案实际上是在名为“point”的列表中使用元组作为2D点。您可以将更多点添加到列表point中。我会编辑以使其更清晰。 - NAmorim
谢谢!我必须显式地将元组中的值转换为 intsubdiv.insert(pts.astype(np.int16)) 对我也起作用。然而,只有 pts.astype(np.int16) 起作用 - 至少在我的系统上,intnp.int32np.int64 等都不起作用。我不知道为什么... - Raj K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接