Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:ValueError:类的数量必须大于一个;得了1分_Python_Image Processing_Computer Vision_Classification_Svm - Fatal编程技术网

Python:ValueError:类的数量必须大于一个;得了1分

Python:ValueError:类的数量必须大于一个;得了1分,python,image-processing,computer-vision,classification,svm,Python,Image Processing,Computer Vision,Classification,Svm,根据的建议,计算一组图像的红色通道直方图,然后将其分类为正确类型的代码如下: 导入cv2 导入操作系统 导入glob 将numpy作为np导入 从撇渣进口io root=“C:/Users/joasa/data/train” 文件夹=[“类型1”、“类型2”、“类型3”] 扩展名=“*.jpg” #跳过由损坏的文件引起的错误 def文件_有效(文件名): 尝试: io.imread(文件名) 返回真值 除: 返回错误 def compute_red_直方图(根、文件夹、扩展名): X=[] y=

根据的建议,计算一组图像的红色通道直方图,然后将其分类为正确类型的代码如下:

导入cv2
导入操作系统
导入glob
将numpy作为np导入
从撇渣进口io
root=“C:/Users/joasa/data/train”
文件夹=[“类型1”、“类型2”、“类型3”]
扩展名=“*.jpg”
#跳过由损坏的文件引起的错误
def文件_有效(文件名):
尝试:
io.imread(文件名)
返回真值
除:
返回错误
def compute_red_直方图(根、文件夹、扩展名):
X=[]
y=[]
对于n,imtype in enumerate(文件夹):
filenames=glob.glob(os.path.join(根、imtype、扩展名))
对于过滤器中的fn(文件\有效,文件名):
打印(fn)
图像=io.imread(fn)
img=cv2.resize(图像,无,fx=0.1,fy=0.1,插值=cv2.INTER_区域)
红色=img[:,:,0]
h、 _uu=np.直方图(红色,bins=np.arange(257),normed=True)
X.1(h)
y、 附加(n)
返回np.vstack(X),np.array(y)
十、 y=计算红色直方图(根、文件夹、扩展名)
从sklearn.model\u选择导入列车\u测试\u拆分
X_序列,X_测试,y_序列,y_测试=序列测试分割(X,y,测试大小=0.5,随机状态=0)
从sklearn.svm导入SVC
clf=SVC()
clf.fit(X_系列、y_系列)
y_检验
clf.预测(X_检验)
y_检验==clf.预测(X_检验)
分数=clf分数(X_检验,y_检验)
预测=pd.DataFrame(y_测试,分数,列=['prediction','score'])。到_csv('prediction.csv'))
我得到这个错误:

ValueError:类的数量必须大于一个;得到1个

有人能帮忙吗?谢谢

看看你的功能:

def compute_red_histogram(root, folders, extension):
    X = []
    y = []
    for n, imtype in enumerate(folders):
        filenames = glob.glob(os.path.join(root, imtype, extension))
        for fn in filter(file_is_valid, filenames):
            print(fn)
            image = io.imread(fn)
            img = cv2.resize(image, None, fx=0.1, fy=0.1, interpolation=cv2.INTER_AREA)
            red = img[:, :, 0]
            h, _ = np.histogram(red, bins=np.arange(257), normed=True)
            X.append(h)
            y.append(n)
        return np.vstack(X), np.array(y) ## <--- this line is not properly indented.
def compute_red_直方图(根、文件夹、扩展名):
X=[]
y=[]
对于n,imtype in enumerate(文件夹):
filenames=glob.glob(os.path.join(根、imtype、扩展名))
对于过滤器中的fn(文件\有效,文件名):
打印(fn)
图像=io.imread(fn)
img=cv2.resize(图像,无,fx=0.1,fy=0.1,插值=cv2.INTER_区域)
红色=img[:,:,0]
h、 _uu=np.直方图(红色,bins=np.arange(257),normed=True)
X.1(h)
y、 附加(n)

返回np.vstack(X),np.array(y)##我也有同样的问题 我发现 有时,在下载ur数据时,标签或目标是字符串
试试y=y.astype(np.uint8)

似乎您的
y\u列只包含一个类。验证所有三个类都在
y\u train
中表示。如何验证?(1)您可以在
compute\u red\u histogram()
中发现错误,或者(2)打印
(y\u train.min(),y\u train.max())
并查看它是否都是零。谢谢。我还想将我的预测保存到一个.csv文件中,我已经更新了上面的代码,向您展示了我所做的。除了每个图像所属的类之外,我想显示预测分数,但它给了我一个错误:未大小对象的TypeError:len()。你知道为什么吗?