weixin_49081127 2021-03-29 11:24 采纳率: 0%
浏览 116

小白求助对于图片resize的python编程一致报错,有没有大佬帮忙看看

import os
import cv2
import numpy as np
IMAGE_SIZE = 64

#按照指定图像大小调整尺寸, 这个函数的功能是判断图片是不是正方形,如果不是则增加短边的长度使之变成正方形
# 这样再调用cv2.resize() 函数就可以实现等比例缩放了。因为我们制定缩放的比例就是64*64,只有缩放之前图像为正方形才能确保图像不失真。
def resize_image(image, height=IMAGE_SIZE, width=IMAGE_SIZE):
    top, bottom, left, right = (0, 0, 0, 0)
    #获取图像尺寸h和w 最后一个是channel
    h, w, c = image.shape
    # print(h,w,c)
    #对于长宽不相等的图片,找到最长的一边
    longest_edge = max(h,w)
    #计算短边需要增加多少像素宽度使其与长边等长
    if h < longest_edge:
        dh = longest_edge-h
        top = dh//2
        bottom = dh-top
    elif w < longest_edge:
        dw = longest_edge-w
        left = dw//2
        right = dw-left
    else:
        pass
    #RGB颜色
    BLACK = [0, 0, 0]
    #给图像增加边界,让图片长,宽等长,cv2.BORDER_CONSTANT指定边界颜色由value制定
    constant = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=BLACK)
    #调整图像大小并返回
    return cv2.resize(constant, (height, width))

images = []
labels = []
def read_path(path_name):
    #这一步的操作是得到所有图片的绝对路径
    for dir_item in os.listdir(path_name): #遍历出所有的照片名字
        #从初始路径开始叠加,合并成可识别的操作路径
        full_path = os.path.abspath(os.path.join(path_name, dir_item))
        if os.path.isdir(full_path): #如果是文件夹,继续递归调用
            read_path(full_path) #递归调用
        else: #文件
            if dir_item.endswith('.jpg'):
                image = cv2.imread(full_path)
                image = resize_image(image, IMAGE_SIZE, IMAGE_SIZE)
                #放开这个代码,可以看到 resize_image()函数的实际调用效果
                cv2.imwrite('1.jpg', image)
                images.append(image)
                labels.append(path_name)
# 从指定路径读取训练数据
def load_dataset(path_name):
    images, labels = read_path(path_name)

    # print(images, labels)
    #将输入的所有图片转成四维数组,尺寸为(图片数量*IMAGE_SIZE*IMAGE_SIZE*3)
    #图片为64*64像素,一个像素3个颜色值(RGB)
    images = np.array(images)
    # print(images.shape)
    #标注数据,‘zq’文件夹下都是我的脸部图像,全部指定为0,另外一个文件夹下是樊磊的,全部指定为1
    labels = np.array([0 if label.endswith('zq') else 1 for label in labels])
    return images, labels


if __name__ == '__main__':
    images, labels = read_path('data')

Traceback (most recent call last):
  File "C:/Users/ZQ/PycharmProjects/face test/4.resize.py", line 67, in <module>
    images, labels = read_path('data')
TypeError: cannot unpack non-iterable NoneType object
 

  • 写回答

2条回答 默认 最新

  • CSDN专家-HGJ 2021-03-29 11:32
    关注

    函数调用时,如没有return语句,打印输出的数据为None,代码中的函数read_path(path_name)中缺了return,要加上return images,labels,这样在调用时才有数据返回。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算