cv.imshow throws (-215:Assertion failed) src_depth != CV_16F && src_depth != CV_32S 函数'convertToShow'

新手上路,请多包涵

在这段代码中,我试图对图像进行积分,每次运行这段代码时,窗口都会闪烁并消失,然后我在终端中收到此错误

import cv2
import numpy as np

image = cv2.imread("nancy.jpg")
(rows,cols,dims) = image.shape

sum = np.zeros((rows,cols), np.uint8)
imageIntegral = cv2.integral(image, sum, -1)

cv2.imshow("imageIntegral", imageIntegral)
cv2.waitKey()

错误:

cv2.imshow(“imageIntegral”,imageIntegral)cv2.error: OpenCV(4.1.0) C:/projects/opencv-python/opencv/modules/highgui/src/precomp.hpp:131:

错误:(-215:断言失败)函数“convertToShow”中的 src_depth != CV_16F && src_depth != CV_32S

原文由 N.Elsayed 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

关于 cv2.integral 的帮助:

 >>> import cv2
>>> print(cv2.__version__)
4.0.1-dev
>>> help(cv2.integral)
Help on built-in function integral:

integral(...)
    integral(src[, sum[, sdepth]]) -> sum
    .   @overload

一个简单的演示:

 import numpy as np
import cv2

img = np.uint8(np.random.random((2,2,3))*255)
dst = cv2.integral(img)

>>> print(img.shape, img.dtype)
(2, 2, 3) uint8
>>> print(dst.shape, dst.dtype)
(3, 3, 3) int32

而且你不应该直接在 dst 图像上使用 imshow,因为它不是 np.uint8。将其规范化为 np.uint8 (范围 0 到 255)或 np.float32 (范围 0.0 到 1.0)。你可以在这个链接找到原因: How to use `cv2.imshow` correctly for the float image returned by `cv2.distanceTransform`?

原文由 Stackoverflow 发布,翻译遵循 CC BY-SA 4.0 许可协议

检查您的图像是否为 uint8

 image = image.astype(np.uint8)

原文由 vishal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题