Python cv2.error:OpenCV(4.0.0)error:(-215:断言失败)dst.data==(uchar*)函数中的dst_ptr';cvShowImage';

Python cv2.error:OpenCV(4.0.0)error:(-215:断言失败)dst.data==(uchar*)函数中的dst_ptr';cvShowImage';,python,python-3.x,opencv,image-processing,anaconda,Python,Python 3.x,Opencv,Image Processing,Anaconda,在上面的代码中,我尝试使用opencv的imshow()函数显示图像。当我尝试使用第一种方法时,即从一个示例图像中装入一个数组,代码工作得很好,但是当我创建自己的数组时,我得到了以下错误- import numpy as np import cv2 # first_method # img = cv2.imread('sample.jpg') # second_method # img = np.zeros((1000, 1000, 3), np.int8) while True:

在上面的代码中,我尝试使用opencv的imshow()函数显示图像。当我尝试使用第一种方法时,即从一个示例图像中装入一个数组,代码工作得很好,但是当我创建自己的数组时,我得到了以下错误-

import numpy as np
import cv2

# first_method
# img = cv2.imread('sample.jpg')
# second_method
# img = np.zeros((1000, 1000, 3), np.int8) 

while True:
    cv2.imshow('sample', img)
    if cv2.waitKey(20) & 0xFF == 27:
        break
cv2.destroyAllWindows()
PS C:\Users\tanma\Dropbox\Coding\python\AI>python。\test\u 1.py
回溯(最近一次呼叫最后一次):
文件“\test_1.py”,第16行,在
cv2.imshow(“样本”,img)
cv2.error:OpenCV(4.0.0)C:\projects\OpenCV python\OpenCV\modules\highgui\src\window_w32.cpp:1230:error:(-215:断言失败)dst.data==(uchar*)函数“cvShowImage”中的dst_ptr

您自己的数组生成错误,因为数据类型“int8”不正确,需要更改为“uint8”,即8位无符号整数。这是因为颜色由0-255的整数表示,使用有符号整数只允许127之前的正整数

我在使用OpenCV 4.0.0时遇到了类似的问题。根据,该错误在4.0.1中已修复,因此您只需更新opencv python包即可

我的图像是浮点型的,但根据我的说法,显示这样的图像是可以的:

  • 如果图像是8位无符号的,它将按原样显示
  • 如果图像是16位无符号或32位整数,则像素除以256。 也就是说,值范围[0255*256]被映射到[0255]
  • 如果图像是32位浮点,则像素值将乘以255。也就是说,值范围[0,1]被映射到[0255]

使用opencv2 3.4.3版下的第二种方法,您的代码可以正常工作。每20毫秒,您会一次又一次地显示相同的图像。我并不奇怪你最终会撞坏东西。尝试将
imshow
从循环中移出。@CrisLuengo可以肯定,用相同的图像调用
imshow
会有很多无用的工作,但它只是在同一窗口中更新图像的内部副本——为什么会导致崩溃(除非OpenCV本身存在一些错误)可能是输入错误:
np.uint8
而不是
np.int8
?是工作人员,非常感谢。我卸载并重新安装了opencv。浮点和int的选择将限制允许的值范围,这有点奇怪。。。但这个答案为我指明了正确的方向!
PS C:\Users\tanma\Dropbox\Coding\python\AI> python .\test_1.py
Traceback (most recent call last):
  File ".\test_1.py", line 16, in <module>
    cv2.imshow('sample', img)
cv2.error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\highgui\src\window_w32.cpp:1230: error: (-215:Assertion failed) dst.data == (uchar*)dst_ptr in function 'cvShowImage'