调用OpenCV函数时Numpy和OpenCV2数据类型冲突

2024-10-01 09:31:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用opencv2pythonapi时遇到了一个大问题。不再有单独的OpenCV矩阵类型。每个矩阵实际上都是一个numpy矩阵。到现在为止,一直都还不错。在这些需要特定数据类型的矩阵上调用OpenCV函数时,会出现问题。OpenCV似乎在协调numpy数据类型和OpenCV数据类型方面存在问题。例如,带有np.uint8的numpy矩阵似乎不被识别为cv_8uc1。在

下面是一个具体的例子,在尝试对阈值图像进行距离变换时,它出错了:

    # threshold operation
    val, thr =  cv2.threshold(img, 64, 255, cv2.THRESH_BINARY )

    # storage matrix for the distance map
    map = np.zeros((rows,cols,1), np.uint8)

    # attempt to apply distance transform
    out  = cv2.distanceTransform(thr, cv2.DIST_LABEL_CCOMP, 3, map)

这将产生以下错误:

^{pr2}$

thr.dtypenp.uint8,所以我不知道为什么会出现这个错误。opencv2是否没有从numpy数据类型映射到相应的OpenCV数据类型?在

我很乐意找到解决这个问题的办法。在


Tags: 函数numpy类型mapthreshold错误np矩阵
1条回答
网友
1楼 · 发布于 2024-10-01 09:31:56

无法复制。。。在

import cv2
import numpy as np

thr = np.random.rand(100,100).astype(np.uint8)
map = np.zeros((100,100,1), np.uint8)
out = cv2.distanceTransform(thr, cv2.DIST_LABEL_CCOMP, 3, map)
# no errors

您可以再次检查使用的数据类型。在

^{pr2}$

相关问题 更多 >