OpenCv contrib 函数“细化”不起作用

问题描述

在试图找到一种快速方法来“骨架化”边缘时,我遇到了包含在 OpenCV Contrib 中的 thinning 函数。输入是具有不同大小但在 np.shape(originalEdges) == (200,200) 范围内的梯度的图像。 我尝试了两种实现该功能方法。首先,使用命令 thinnedImg = cv2.ximgproc.thinning(originalEdges)函数输出分配给一个新变量。使用它,程序会抛出以下错误(-209:Sizes of input arguments do not match) The operation is neither 'array op array'(where arrays have the same size and type),nor 'array op scalar',nor 'scalar op array' in function 'binary_op'.

我尝试了另一种方法 cv2.ximgproc.thinning(originalEdges,thinnedImg),其中我将新变量初始化为 thinnedImg = np.zeros( np.shape(originalEdges).astype(int)。通过这种方式,我确保尺寸正确。通过使用 print('Type1 :',type(originalEdges[0,0]),',type 2:',type(thinnedImg[0,0]) ),我确保两者都具有相同的数据类型,即 <class 'numpy.int64'>。此方法会引发 TypeError:Expected Ptr<cv::UMat> for argument 'dst'。请注意,它专门针对目标对象(这是函数的第二个参数)引发错误,这意味着源对象(第一个参数)最初得到了很好的处理。

正如我在网上发现的 cv::UMat 等价于 float32 类型,我相应地修改代码并制作了这种类型的两个输入。这次我再次收到错误信息,告诉我 Sizes of input arguments do not match。但是,上面的代码使用源对象的形状来创建目标对象。使用 np.shape() 确认大小相等。令人惊讶的是,如果我使用 float32float64 的组合不会生成类型错误,但再次抛出大小错误

我尝试的最后一件事是(对于两个对象的 float 和 int 数据类型),并将其与使用 cv2.UMat(thinnedImage) 用于目标对象和 cv2.UMat(originalEdges) 用于源对象,分别和同时为两者。这仍然会增加尺寸误差。

如何修改函数的参数以确保其正常工作?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)