python图像处理-图片分类项目

本文介绍了一个使用Python进行图像分类的项目,包括将图片转换为batch文件、batch文件转回json映射图片,以及模型训练的过程。作者强调了模型训练后的调参优化对于提高分类成功率的重要性。
摘要由CSDN通过智能技术生成

目录

  • 最近帮朋友做一个图片数据分类的项目,借鉴了大佬的代码,修修改改,话不多说直接上代码!

一、图片转batch文件

在这里插入图片描述

import numpy as np
from PIL import Image
import operator
from os import listdir
import sys
import pickle
import random

data = {
   }
list1 = []
list2 = []
list3 = []


# 将图片转化为32*32的三通道图片
def img_tra():
    for k in range(0, num):
        currentpath = folder + "/" + imglist[k]
        im = Image.open(currentpath)
        # width=im.size[0]
        # height=im.size[1]
        x_s = 32
        y_s = 32
        out = im.resize((x_s, y_s), Image.ANTIALIAS)
        out.save(folder_ad + "/" + str(imglist[k]))


def addWord(theIndex, word, adder):
    theIndex.setdefault(word, []).append(adder)


# 图片存储格式
def seplabel(fname):
    filestr = fname.split(".")[0]
    label = int(filestr.split("_")[0])
    return fname


# 我们将点操作与写文件写在一个函数mkcf()函数中
def mkcf():
    global data
    global list1
    global list2
    global list3

    for k in range(0, num):  # 图片数量
        currentpath = folder_ad + "/" + imglist[k]  # 现在是第几张图
        im = Image.open(currentpath)  # 打开图片
        # im = im.convert("RGB")
        im = im.convert('L')
        with open(binpath, 'a') as f:  # a是函数的设定,打开图片,添加信息到list1
            for i in range(0, 32):
                for j in range(0, 32):
                    # print(im)
                    # print(im.mode)
                    # print(im.getpixel((0, 0)))
                    cl = im.getpixel((i, j))
                    print(cl)
                    list1.append(cl[0])

            for i in range(0, 32):
                for j in range(0, 32):
                    cl = im.getpixel((i, j))
                    # with open(binpath, 'a') as f:
                    # mid=str(cl[1])
                    # f.write(mid)
                    list1.append(cl[1])

            for i in range(0, 32):
                for j in range(0, 32):
                    cl = im.getpixel((i, j))
                    list1.append(cl[2])

        list2.append(list1)
        list1 = []
        f.close()
        print("image" + str(k + 1) + "saved.")

        list3.append(imglist[k].encode('utf-8'))

    arr2 = np.array(list2, dtype=np.uint8)
    data['batch_label'.encode('utf-8')] = 'batch_1'.encode('utf-8')  # batch label包的名字
    data.setdefault('labels'.encode('utf-8'), label)  # lable 特征
    data.setdefault('data'.encode('utf-8'), arr2)  # data 图像
    data.setdefault('filenames'.encode('utf-8'), list3)  # filename文件名

    output = open(binpath, 'wb')
    pickle.dump(data, output)
    output.close()


# folder = r"D:\lhh\python\demo\图片制作数据集\left50s"
name = 'test'
folder_ad = r"D:\lhh\python\demo\图片制作数据集\shujuji\size54_50pics\{}".format(name)
imglist = listdir(folder_ad)
num = len(imglist)
# img_tra()
label = []
for i in range(0, num):
    label.append(seplabel(imglist[i]))
# print(label)
binpath = r"D:\lhh\python\demo\图片制作数据集\{}batch".format(name)
mkcf()

  • 生成batch文件
  • 在这里插入图片描述

二、batch文件转json对应图片

  • 读取batch文件,做成对应的json文件导入
  • 在这里插入图片描述
#%%

import torch
import torchvision
import numpy as np
import cv2
import os
import json

def unpickle(file):
    import pickle
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='bytes')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值