积分图像错误代码 cv2.imshow("imageIntegral",imageIntegral)

N.E*_*yed 8 opencv python-2.7

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

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()
Run Code Online (Sandbox Code Playgroud)

错误:

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

错误: (-215:Assertion failed) src_depth != CV_16F && src_depth != CV_32S in function 'convertToShow'

小智 19

检查你的形象是否UINT8与否

image = image.astype(np.uint8)
Run Code Online (Sandbox Code Playgroud)


Kin*_*t 金 8

关于 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
Run Code Online (Sandbox Code Playgroud)

一个简单的演示:

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
Run Code Online (Sandbox Code Playgroud)

并且您不应该直接在 dst 图像上使用 imshow,因为它不是 np.uint8。将其标准化为 np.uint8 (0, 255) 或 np.float32(0, 1.0)。您可以在此链接中找到原因:如何正确使用“cv2.imshow”来处理由“cv2.distanceTransform”返回的浮动图像?