以下是我在Spyder环境中输入的代码:
import os
import cv2
import numpy as np
path1="E:\\academic\\FINAL YR PROJ\\PROJECT_DATASETS\\floyd_jan\\dr"
path2="E:\\academic\\FINAL YR PROJ\\PROJECT_DATASETS\\floyd_jan\\greendr"
names=[]
names=os.listdir(path1)
for i in names:
bgr = cv2.imread(path1+"\\"+i,1)
green = bgr[: , : , 1]
lab = cv2.cvtColor(green, cv2.COLOR_BGR2LAB)
lab_planes = cv2.split(lab)
clahe = cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
lab_planes[0] = clahe.apply(lab_planes[0])
lab = cv2.merge(lab_planes)
bgr = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)
cv2.imwrite(path2+"\\"+i,bgr)
运行代码时出现以下错误:
追踪(最近一次呼叫最后一次):
文件“”,第8行,in lab = cv2.cvtColor(green,cv2.COLOR_BGR2LAB)
错误: C:\项目\的OpenCV-蟒\的OpenCV \模块\ imgproc \ SRC \ color.cpp:10724: 错误:(-215)(scn == 3 || scn == 4)&& (深度== CV_8U ||深度== CV_32F)函数cv :: cvtColor
无法找到解决方案!
答案 0 :(得分:1)
问题在于您调用色彩空间转换功能的部分
green = bgr[: , : , 1]
lab = cv2.cvtColor(green, cv2.COLOR_BGR2LAB)
您正在使用灰度(单通道)图像green
执行色彩空间转换(cv2.COLOR_BGR2LAB
),该转换适用于彩色图像(3个通道)。
您应该做的是使用bgr
代替green
作为cv2.cvtColor
的输入。
lab = cv2.cvtColor(bgr, cv2.COLOR_BGR2LAB)
答案 1 :(得分:0)
在使用imread
读取文件名之前打印该文件的名称。这应该可以让您对程序正在读取的文件有一个很好的了解。
如果您确定目录中的所有文件都是图像,则很可能是由desktop.ini
引起的,imread正在读取隐藏文件。在这种情况下,imread
将返回无,bgr将为 NoneType ,cvtColor
函数无法理解。
提出条件
if bgr:
...
编辑:可能是desktop.ini不是问题。如果是,那么你应该在第7行遇到错误,你试图提取绿色通道。正如@sgarizvi所指出的,您将灰度值传递给cvtColor。
答案 2 :(得分:0)
尝试参考此链接open cv error: (-215) scn == 3 || scn == 4 in function cvtColor。将反斜杠更改为正斜杠可以解决我的错误。