【问题标题】:OpenCV cvtColor issue in python [closed]python中的OpenCV cvtColor问题[关闭]
【发布时间】:2019-07-11 06:16:51
【问题描述】:

我正在尝试遵循教程here,但我不断收到以下错误。我读到in this stackoverflow post 说问题是因为cvtColor 只需要 8 位或 16 位图像。

我的图像是一个 png,来自 matplotlib 中的plt.savefig(),我认为它是一个 24 位图像。

1) 我对问题的诊断是正确的还是完全错误的?

2) 假设 1) 为真,我一直在寻找将 24 位图像转换为 8/16 位的方法,但到目前为止我还没有找到任何东西。我的 matplotlib 图是从保存为 array.npy 文件的 numpy 数组中保存的图片。我应该尝试修改array.npy 文件吗?

教程代码供参考:

import cv2 as cv

im = cv.imread("binary_graph_8.png")
imgray = cv.cvtColor(im, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(imgray, 127, 255, 0)
im2, contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

错误信息:

  File "C:/Users/ek247/.PyCharm2018.3/config/scratches/scratch_1.py", line 5, in <module>
    imgray = cv.cvtColor(im, cv.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

【问题讨论】:

  • 您说您的图像是PNG,但您的代码打开的是JPEG?一般来说,人们说 8 位和 24 位图像时的意思是一样的,因为红色、绿色和蓝色样本的每个样本 8 位使得每个像素为 24 位。
  • 我的图片是 PNG,但我直接从使用 JPEG 的教程中发布了代码。
  • @MarkSetchell 我继续上传图片并复制了我的代码,而不是教程中的代码,事后看来,这似乎是更明智的做法!
  • 您的图像不为空的断言失败。所以唯一可能的解释是你的图片是空的,即它没有加载,所以路径可能不正确。
  • 你是对的。我只是试图打印出im,结果没有。我想知道为什么图像显示为空,但至少我不再卡住了!

标签: python opencv


【解决方案1】:

请检查此条目的答案,因为这是我在回复您时的想法:

OpenCV !_src.empty() in function 'cvtColor' error

这个错误是因为图片没有正确加载。那么你 上一行 cv2.imread 有问题我的建议是:

- check if the images exist in the path you give
- check the count variable if he have valid number

希望对你有帮助。

【讨论】:

  • 原来我的图片是空的...实际上我一直只是将python加载到错误的文件夹中:(愚蠢的错误
  • 这种情况有时会发生。这是我首先想到的,但它们有助于学习。 :) 祝你好运!
猜你喜欢
  • 2017-03-02
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 2021-01-02
  • 2021-05-12
  • 1970-01-01
  • 2015-05-11
  • 2017-06-16
相关资源
最近更新 更多