使用python在图像上执行CLAHE时出错(-215)

时间:2018-02-08 04:58:21

标签: python opencv deep-learning spyder

以下是我在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

无法找到解决方案!

3 个答案:

答案 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。将反斜杠更改为正斜杠可以解决我的错误。