【问题标题】:cv2.error: OpenCV(4.0.0) error: (-215:Assertion failed) dst.data == (uchar*)dst_ptr in function 'cvShowImage'cv2.error: OpenCV(4.0.0) 错误: (-215:Assertion failed) dst.data == (uchar*)dst_ptr in function 'cvShowImage'
【发布时间】:2019-06-19 13:55:30
【问题描述】:
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()

在上面的代码中,我尝试使用 opencv 的 imshow() 函数显示图像。当我尝试使用第一种方法时,即从示例图像中创建一个数组时,代码可以完美运行,但是当我创建自己的数组时,出现以下错误-

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'

【问题讨论】:

  • 您的代码在opencv2 3.4.3版本下使用第二种方法正常工作
  • 您每 20 毫秒一次又一次地显示相同的图像。我对你最终崩溃的东西并不感到惊讶。尝试将imshow 移出循环。
  • @CrisLuengo 当然,用相同的图像调用imshow 是很多无用的工作,但它只是在同一窗口中更新图像的内部副本——为什么会导致崩溃(除非OpenCV 本身有一些错误)?
  • 可能有错字:np.uint8 而不是np.int8?
  • 它正在工作,非常感谢。我卸载并重新安装了opencv。

标签: python python-3.x opencv image-processing anaconda


【解决方案1】:

我在使用 OpenCV 4.0.0 时遇到了类似的问题。根据this的说法,这个bug在4.0.1已经修复,所以你可以直接更新opencv-python包。

我的图像是浮点类型的,但根据OpenCV Documentation 可以显示这样的图像:

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

【讨论】:

  • 浮点与整数的选择将限制允许的值范围,这有点奇怪......但这个答案指向了正确的方向!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 2021-07-30
    • 2020-06-07
    • 2019-08-30
    • 2021-08-16
    • 1970-01-01
    • 2019-11-12
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多