【问题标题】:opencv cvtColor dtype issue(error: (-215) )opencv cvtColor dtype问题(错误:(-215))
【发布时间】:2017-03-02 22:52:27
【问题描述】:

我偶然发现并解决了这个 dtype 问题,希望对某些人有所帮助。

通常我们会像这样转换颜色,这很有效:

img = cv2.imread("img.jpg"), 0)
imgColor=cv2.cvtColor(img , cv2.COLOR_GRAY2BGR)

但有时您可以先对图像进行标准化:

img = cv2.imread("img.jpg"), 0)/255.
imgColor=cv2.cvtColor(img , cv2.COLOR_GRAY2BGR)

会导致这个错误:

错误:(-215) 深度 == CV_8U ||深度 == CV_16U || depth == CV_32F in function >cv::cvtColor

重点是,在前一个例子中,dtype 是 uint8,而在后一个例子中是 float64。 要更正此问题,请添加一行:

img = cv2.imread("img.jpg"), 0)/255.
img=img.astype(numpy.float32)
imgColor=cv2.cvtColor(img , cv2.COLOR_GRAY2BGR)

【问题讨论】:

  • 这是一个特定于 numpy 除法行为的问题,而不是 OpenCV。

标签: python opencv numpy


【解决方案1】:

所以这将是一个已解决但与另一个函数 cv2.drawKeypoints() 相关的类似问题。

这将起作用:

img = cv2.imread("img.jpg"), 1)
img_out = numpy.copy(img)
image_out = cv2.drawKeypoints(img,keypointList,img_out,(255,0,0),4)

但是,这不会编译:

img = cv2.imread("img.jpg"), 1)/255.0 
img_out = numpy.copy(img)
image_out = cv2.drawKeypoints(img,keypointList,img_out,(255,0,0),4)

这里我们有这个错误:

错误:(-5) 输入图像类型不正确。

同样,除以 255 或使用“img”进行任何其他导致转换为浮点数的处理都会使“img”不是drawKeypoints 的正确类型。在这里添加img = img.astype(numpy.float32) 没有帮助。对于输入图像 img,事实证明 uint8 有效,但 float32 无效。我在文档中找不到这样的要求。令人困惑的是,与上面与 cvtColor 相关的问题不同,它抱怨“类型”。

所以要让它工作:

img = cv2.imread("img.jpg"), 1)/255.0 
img_out = numpy.copy(img)
img=img.astype(numpy.uint8)
image_out = cv2.drawKeypoints(img,keypointList,img_out,(255,0,0),4)

对于最后一行,我认为 cv2.DRAW_RICH_KEYPOINTS 将用作标志(drawKeyPoints 函数中的最后一个参数)。但是,只有当我使用数字 4 时它才有效。任何解释将不胜感激。

【讨论】:

    猜你喜欢
    • 2019-11-12
    • 2019-06-26
    • 2023-03-08
    • 2021-07-12
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    相关资源
    最近更新 更多