在opencv3.4.2中,添加了为HoughLines()返回的每一行返回投票数(累加器值)的选项。在python中,这似乎得到了支持,而且在OpenCV安装的python docstring中也可以看到:
"Each line is represented by a 2 or 3 element vector (ρ, θ) or (ρ, θ, votes) ."
它也包含在docs中(带有一些中断的格式)。 然而,我无法在python中返回3元素选项(ρ,θ,投票。 下面是演示问题的代码:
import numpy as np
import cv2
print('OpenCV should be at least 3.4.2 to test: ', cv2.__version__)
image = np.eye(10, dtype='uint8')
lines = cv2.HoughLines(image, 1, np.pi/180, 5)
print('(number of lines, 1, output vector dimension): ', lines.shape)
print(lines)
输出
^{pr2}$所需的行为是一个额外的列,其中包含每行收到的投票数。对于投票值,可以应用比标准阈值更高级的选项,因此经常在SE(here,here,here和here)上请求和询问,有时与HoughCircles()等效。然而,这些问题和答案(如修改源代码和重新编译)都是在它正式添加之前提出的,因此不适用于当前的情况。在
从vanilla opencv3.4.3开始,您不能使用Python中的这个功能。在
< H1>如何在C++ +/H1中工作首先在implementation of ^{} 中,我们可以看到选择输出数组
lines
类型的代码:当填充} 中使用的这个参数:
^{pr2}$lines
时,我们可以看到在implementation of ^{可以看到类似的代码in ^{} 。在
基于此,我们需要传入一个固定类型的
_OutputArray
,并在3个通道中存储32位浮点。如何使一个固定类型(但不是固定大小,因为算法需要能够调整大小)_OutputArray
?让我们再看看implementation:cv::Mat
不是固定类型,也不是{cv::Mat3f
(即cv::Matx<_Tp, m, n>
)样本代码:
控制台输出:
Python包装器的工作原理
让我们看看包装
HoughLines
函数的自动生成代码:总结一下,它尝试将在}作为输出参数。(如果这失败了,那么它将对},因此从3.4.3起,Python无法访问此功能。在
lines
参数中传递的对象转换为cv::Mat
,然后调用cv::HoughLines
,并将{cv::UMat
进行相同的尝试)不幸的是,这意味着没有办法给cv::HoughLines
一个固定类型{解决方案
据我所知,唯一的解决方案是修改OpenCV源代码并重新构建。在
快速破解
这很简单,编辑implementation of ^{} 并将默认类型改为
CV_32FC3
:然而,这意味着您将始终获得投票权(这也意味着OpenCL优化(如果存在的话)将不会被使用)。在
更好的补丁
添加一个可选的布尔参数}强制为{}。在
return_votes
,默认值为false
。修改代码,使return_votes
为true
,则{Header:
Implementation:
相关问题 更多 >
编程相关推荐