【问题标题】:Python-OpenCV cv2 OpenCV Error: Assertion failedPython-OpenCV cv2 OpenCV 错误:断言失败
【发布时间】:2018-05-20 23:13:25
【问题描述】:

我正在尝试使用 openCV 在 python 中创建图像。我制作了一个列表列表,每个列表有 16 个数字,从 0 到 255(16 个列表)。然后我将大列表转换为 numpy ndarray,并尝试使用 cv2.imwrite() 将其写入图像。这是我的代码:

import cv2
import numpy as np

colours = []
numbers = []
a=0
for i in range(256):
    numbers.append(a)
    a+=1

for x in range(16):
    new_list = [numbers[16*x:16*x+16]]
    colours.append(new_list)

col = np.asarray(colours)
new_image = cv2.imwrite("rainbow.png",col)

它运行良好,直到最后一行。然后它给了我这个错误:

OpenCV Error: Assertion failed (image.channels() == 1 || image.channels() == 3 || image.channels() == 4) in cv::imwrite_, file C:\projects\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp, line 600
Traceback (most recent call last):
  File "kormou.py", line 16, in <module>
    new_image = cv2.imwrite("rainbow.png",col)
cv2.error: C:\projects\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp:600: error: (-215) image.channels() == 1 || image.channels() == 3 || image.channels() == 4 in function cv::imwrite_

一般来说,我是一个初学者,所以可能很明显我错过了一些东西,但我在这里找不到类似的错误问题。

【问题讨论】:

  • 这是说“image.channels() == 1 || image.channels() == 3 || image.channels() == 4”的断言在imwrite函数中失败了.那么,图像有多少个通道?
  • 您正在向 imwrite 提供 16 通道“图像”。正如文档所述,它仅支持 1,3 或 4 个通道。此外,它不返回图像,而是返回布尔值,因此变量名称new_image 具有误导性。

标签: python-3.x opencv


【解决方案1】:

你正在犯这个非常微小的错误。从以下工作代码中弄清楚 -

import cv2
import numpy as np

colours = []
numbers = []
a=0
for i in range(256):
    numbers.append(a)
    a+=1

for x in range(16):
    new_list = numbers[16*x:16*x+16]
    colours.append(new_list)

print colours
col = np.asarray(colours)
new_image_flag = cv2.imwrite("rain.png",col)

检查编辑提示。

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2017-10-26
    相关资源
    最近更新 更多