场景6 分类数据 每个文件夹对应对应类别,每个类别文件夹放了对应的图片
# 文件结构:
# images
# 0
# xxxx1.bmp
# xxxx2.bmp
# 1
# xxxxx5.bmp
# xxxx8.bmp
# 、、、
# 输出标签文件 label.txt
# xxxx1.bmp 0
# xxxx2.bmp 0
# xxxxx5.bmp 1
# xxxx8.bmp 1
# 、、、
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import os
def traversalDir_FirstDir(path):
list = []
if (os.path.exists(path)):
files = os.listdir(path)
for file in files:
m = os.path.join(path,file)
if (os.path.isdir(m)):
h = os.path.split(m)
list.append(h[1])
return list
def label_classify(imgpath):
labelsave = open("label_5class.txt","a+")
pathDir = traversalDir_FirstDir(imgpath)
for class_name in pathDir:
curr_path = os.path.join(imgpath,class_name)
for imagename in os.listdir(curr_path):
print(imagename)
print(class_name)
labelsave.write(str(imagename)+" "+str(class_name)+"\n")
labelsave.close()
if __name__ == '__main__':
label_classify("./images")
场景1:爬虫得到的数据出现多个文件名相同,需要统一再次重命名。复制多个文件夹的同名文件到一个文件夹
#编码类型
#-*- coding: UTF-8 -*-
#导入包
import os
import shutil
srcpath='./download_images/'
targetpath='./download_images_re/'
#累加,用于命名
i=1
#返回指定路径下的文件和目录信息
pathDir = os.listdir(srcpath)
#遍历
for allDir in pathDir:
for j in os.listdir(os.path.join(srcpath, allDir)):
#路径拼接
imgPath = os.path.join(srcpath,allDir,j)
newtargetpath=targetpath+str(i).zfill(6)+'.jpeg'#zfill()向右对齐,用0补齐
#复制文件
shutil.copyfile(imgPath,newtargetpath)
#打印被复制的文件
print(imgPath)
i+=1
场景2:用bash命令将多级目录下的文件打标签,生成列表文件
例如:
A-
A1
A1-1 1;2;3;4;5.jpg
A1-2
A2
A3
B-
B1
使用下列代码:
find ./ -name "*.*g"|awk -F '/' '{print $0"\t"$(NF-2)}' > own.txt
他最终会生成一个结果文档:左侧对应各个文件的绝对路径 右侧是你想打标签对应的名称(NF-2 指的是完整路径的倒数第二个文件夹名称 即A1)
A/A1/A1-1/1.jpg A1
A/A1/A1-1/2.jpg A1
A/A1/A1-1/3.jpg A1
.......
场景3:从excel文件或者txt文件中获取链接,进而下载
#3-1读取文件,文件形式是每行对应文件下载链接
import os
import urllib.request
file_addr = "./online_data.list"
# xlsx文件存在
if os.path.exists(file_addr): # 读取内容
data_file=open("online_data.list","r+").read().splitlines()
save_path="online_data"
if not os.path.exists(save_path): #日期
os.mkdir(save_path)
for j in data_file:
if j.endswith('.jpg') or j.endswith('.png'):
print(j)
# print('./'+save_path + j.split('/')[-1])
try:
urllib.request.urlretrieve(j, './'+save_path +'/'+ j.split('/')[-1])
except:
continue
############################################################################
#3-2 读取excel 文件 。第21列为图片链接
import xlrd
import os
import urllib.request
file_addr = "./111111111.xls"
# xlsx文件存在
if os.path.exists(file_addr): # 读取内容
xls_file = xlrd.open_workbook(file_addr) # 取第一个sheet页
xls_sheet = xls_file.sheets()[0] # 第一个sheet页的行数和列数
nrows = int(xls_sheet.nrows)
ncols = int(xls_sheet.ncols) # 读取每一行,一般不读第一行,因为是表头
# for now in range(1,nows): #拿到每行的数据,结构是列表,通过索引取每一个字段内容
rows_value = xls_sheet.col_values(21) #第21列 图片链接
# save_path=os.path.join(rows_value[3].split('/')[-1])
save_path="珍爱网"
if not os.path.exists(save_path): #日期
os.mkdir(save_path)
for j in rows_value:
if j.endswith('.jpg') or j.endswith('.png'):
print(j)
# print('./'+save_path + j.split('/')[-1])
urllib.request.urlretrieve(j, './'+save_path +'/'+ j.split('/')[-1])
############################################################################
3-3 读取csv文件
import xlrd
import os
import urllib.request
import csv
import pandas as pd
file_addr = "./头像正样本.csv"
# csv文件存在
if os.path.exists(file_addr): # 读取内容
xls_file = pd.read_csv('头像误推.csv', usecols=['图片链接']).values.tolist() #使用图片链接这一列的数据
save_path="正样本"
if not os.path.exists(save_path): #日期
os.mkdir(save_path)
for i,j in enumerate(xls_file): #读取数据,遍历
if j[0].endswith('.jpg') or j[0].endswith('.png') or j[0].endswith('=='):
j=j[0].strip() #删掉多余的 \t \n
print(j)
# print('./'+save_path + j.split('/')[-1])
urllib.request.urlretrieve(j, './'+save_path +'/'+ j.split('/')[-1])
else:
continue
场景4:使用opencv对人脸进行美白,同时保存md5名称的图像文件
代码参考:https://blog.csdn.net/hongchengling2/article/details/107574175
import numpy as np
import cv2
import os
import matplotlib.pyplot as plt
import hashlib
m2 = hashlib.md5()
def t2s(img):
return cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#Dest =(Src * (100 - Opacity) + (Src + 2 * GuassBlur(EPFFilter(Src) - Src + 128) - 256) * Opacity) /100 ;
def filter_gaussian(img, v1, v2):
dst = np.zeros_like(img)
dx = v1*5
fc = v1*12.5
p = 0.1
#双边滤波
temp1 = cv2.bilateralFilter(img,dx,fc,fc)
#图像矩阵相减,得到人脸轮廓
temp2 = cv2.subtract(temp1,img)
temp2 = cv2.add(temp2,(10,10,10,128))
#高斯模糊
temp3 = cv2.GaussianBlur(temp2,(2*v2-1,2*v2-1),0)
#原图叠加
temp4 = cv2.add(img,temp3)
#按权重混合
dst1 = cv2.addWeighted(img,p,temp4,1-p,0.0)
dst = cv2.add(dst1,(10,10,10,255))
# plt.figure(figsize=(20,20))
# plt.imshow(t2s(cv2.hconcat([img,dst])))
# plt.imshow(t2s(cv2.hconcat([img,temp1,temp2,temp3,temp4,dst1,dst])))
# plt.show()
return dst
save_path="white_face"
if not os.path.exists(save_path): #日期
os.mkdir(save_path)
original_path ="originaldata_818"
for img in os.listdir(original_path):
print(img)
temppath=os.path.join(original_path,img)
img = cv2.imread(temppath)
m2.update(img)
dst = filter_gaussian(img,7,4)
cv2.imwrite("./"+save_path+"/"+m2.hexdigest()+".jpg",dst)
场景5: 读取txt文档的多行两列数据,并转成numpy数组类型
#https://blog.csdn.net/qq_22885109/article/details/80858209 转载
数据实例:
775.483870967742 554.1935483870967
850.3225806451612 555.483870967742
936.1290322580645 558.7096774193549
929.6774193548387 677.4193548387096
925.1612903225806 798.0645161290322
841.2903225806451 803.2258064516129
761.9354838709677 797.4193548387096
770.3225806451612 672.258064516129
851.6129032258065 676.7741935483871
import re
import linecache
import numpy as np
import os
filename = '36.txt'
#数值文本文件直接转换为矩阵数组形式方法二
def txt_to_matrix(filename):
file=open(filename)
lines=file.readlines()
#print lines
#['0.94\t0.81\t...0.62\t\n', ... ,'0.92\t0.86\t...0.62\t\n']形式
rows=len(lines)#文件行数
datamat=np.zeros((rows,2))#初始化矩阵
row=0
for line in lines:
line=line.strip().split(' ')#strip()默认移除字符串首尾空格或换行符
datamat[row,:]=line[:]
row+=1
return datamat
#数值文本文件直接转换为矩阵数组形式方法三
def text_read(filename):
# Try to read a txt file and return a matrix.Return [] if there was a mistake.
try:
file = open(filename,'r')
except IOError:
error = []
return error
content = file.readlines()
rows=len(content)#文件行数
datamat=np.zeros((rows,2))#初始化矩阵
row_count=0
for i in range(rows):
content[i] = content[i].strip().split(' ')
datamat[row_count,:] = content[i][:]
row_count+=1
file.close()
return datamat
if __name__ == '__main__':
data = txt_to_matrix(filename)
print (data)
out = text_read('36.txt')
print (out)