使用OpenCV将图像转为灰度图时出现通道数错误的求助
错误原因与解决方法
错误原因
你调用cv.imread()时传入了第二个参数0,这个参数会让OpenCV直接将图像以单通道灰度图的格式读取(对应错误信息里的scn is 1,即通道数为1)。而cv.cvtColor(img1, cv.COLOR_BGR2GRAY)函数的作用是将3通道BGR彩色图像转换为灰度图,它要求输入图像必须是3通道或4通道,因此当输入已经是单通道灰度图时,就会触发通道数不匹配的错误。
解决方法
根据你的需求选择以下任意一种方案:
方案1:直接使用已读取的灰度图
如果你的目标就是获取灰度图,无需调用cv.cvtColor(),因为cv.imread(..., 0)已经完成了灰度转换。修改后的代码如下:
import numpy as np import cv2 as cv from matplotlib import pyplot as plt img1 = cv.imread('the correct path', 0) # 直接读取为单通道灰度图 img2 = cv.imread('the correct path', 0) # 同样读取为灰度图 # 移除无效的cvtColor调用,直接使用img1即可
方案2:先读取彩色图再转灰度
如果你需要先处理彩色图再转换为灰度,把cv.imread()的第二个参数去掉(默认值为1,读取3通道彩色图),再执行灰度转换:
import numpy as np import cv2 as cv from matplotlib import pyplot as plt img1 = cv.imread('the correct path') # 读取3通道BGR彩色图 img2 = cv.imread('the correct path') # 读取彩色图 gray = cv.cvtColor(img1, cv.COLOR_BGR2GRAY) # 此时转换有效
内容的提问来源于stack exchange,提问作者Cole Uhlig
相关产品推荐
相关产品推荐

