【发布时间】: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,结果没有。我想知道为什么图像显示为空,但至少我不再卡住了!