有关图像处理以及表格数据处理的常用函数


import cv2
import os
import xlrd
import datetime
from xlrd import xldate_as_tuple
import shutil
import re




#***********逐个读取像素,确定图片是否含有某个颜色*********

#************************
def panduancolor(path):
    pic_path = path   # 图片路径
    img = cv2.imread(pic_path)
    HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    num_black = 0
    num_color = 0
    pixel_all_bgr = []
    pixel_all_hsv = []
    oimage_color_type="Grey Image"
    for x in range(img.shape[0]):   # 图片的高
        for y in range(img.shape[1]): # 图片的宽
            r,g,b = img[x,y]
            hsv = HSV[x,y]
            pixel_all_hsv.append(hsv)
    for i in pixel_all_hsv:
# ***********可以根据hsv值表来判断是否存在目标颜色************
        if 0<=i[0]<26 and 43<=i[1]<=255 and 46<=i[2]<=255:
            oimage_color_type = "color Image"
            break
        else:
            continue
    return oimage_color_type





#***********获取文件夹下的所有文件夹的目录名称,返回文件目录列表***********
def build_dir_name_list(dirct): #需要检查的包的文件路径
    dirList=[]
    #fileList=[]
    files=os.listdir(dirct)  #文件夹下所有目录的列表
    for f in files:
        if os.path.isdir(dirct + '/'+f):   #这里是绝对路径,该句判断目录是否是文件夹,如果对文件名字的格式有要求可以强制转换int(f)
            dirList.append(f)
        #elif os.path.isfile(dirct + '/'+f):#这里是绝对路径,该句判断目录是否是文件
            #fileList.append(f)
        else:
            continue
    print("文件夹有:",dirList)
    #print("文件有:",fileList)
    return dirList





#***********获取文件夹下的所有文件的目录名称,返回文件目录列表***********
def build_file_name_list(dirct): #需要检查的包的文件路径
    #dirList=[]
    fileList=[]
    files=os.listdir(dirct)  #文件夹下所有目录的列表
    for f in files:
        if os.path.isfile(dirct + '/'+f):   #这里是绝对路径,该句判断目录是否是文件夹,如果对文件名字的格式有要求可以强制转换int(f)
            fileList.append(f)
        #elif os.path.isfile(dirct + '/'+f):#这里是绝对路径,该句判断目录是否是文件
            #fileList.append(f)
        else:
            continue
    #print("文件夹有:",dirList)
    print("文件有:",fileList)
    return fileList


#***********获取文件夹下的所有文件的目录名称和文件的名称***********
def build_name_list(dirct): #需要检查的包的文件路径
    dirList=[]
    fileList=[]
    files=os.listdir(dirct)  #文件夹下所有目录的列表
    for f in files:
        if os.path.isdir(dirct + '/'+f):   #这里是绝对路径,该句判断目录是否是文件夹,如果对文件名字的格式有要求可以强制转换int(f)
            dirList.append(f)
        elif os.path.isfile(dirct + '/'+f):#这里是绝对路径,该句判断目录是否是文件
            fileList.append(f)
    print("文件夹有:",dirList)
    print("文件有:",fileList)
    return dirList,fileList
    #获取的时候bgr,hsv = build_name_list(dirct)

build_name_list("")





#***********bgr值,返回所有bgr值的列表***********
#***********hsv值,返回所有hsv值的列表***********

def bgr_get(path):
    pic_path = path  # 图片路径
    img = cv2.imread(pic_path)
    pixel_all_bgr = []
    for x in range(img.shape[0]):  # 图片的高
        for y in range(img.shape[1]):  # 图片的宽
            rgb = img[x, y]
            pixel_all_bgr.append(rgb)
    return pixel_all_bgr

def hsv_get(path):
    pic_path = path  # 图片路径
    img = cv2.imread(pic_path)
    HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    pixel_all_hsv = []
    for x in range(img.shape[0]):  # 图片的高
        for y in range(img.shape[1]):  # 图片的宽
            hsv = HSV[x, y]
            pixel_all_hsv.append(hsv)
    return pixel_all_hsv





'''
关于表格的文件整理库
'''
def delete(path):
    if os.path.exists(path):  # 如果文件存在删除文件
        os.remove(path)#或者下面这句
        #shutil.rmtree(path) #删除某一路径的文件夹(还有文件或者文件夹的目录都可以一起删掉)
class ExcelData():    #提取有效行数和列数,提取整行数据
    # 初始化方法
    def __init__(self, data_path, sheetname):
        #定义一个属性接收文件路径
        self.data_path = data_path
        # 定义一个属性接收工作表名称
        self.sheetname = sheetname
        # 使用xlrd模块打开excel表读取数据
        self.data = xlrd.open_workbook(self.data_path)
        # 根据工作表的名称获取工作表中的内容(方式①)
        self.table = self.data.sheet_by_name(self.sheetname)
        # 根据工作表的索引获取工作表的内容(方式②)
        # self.table = self.data.sheet_by_name(0)
        # 获取第一行所有内容,如果括号中1就是第二行,这点跟列表索引类似
        self.keys = self.table.row_values(0)
        # 获取工作表的有效行数
        self.rowNum = self.table.nrows
        # 获取工作表的有效列数
        self.colNum = self.table.ncols

    # 定义一个读取excel表的方法
    def readExcel(self):
        # 定义一个空列表
        datas = []
        for i in range(1, self.rowNum):
            # 定义一个空字典
            sheet_data = {}
            for j in range(self.colNum):
                # 获取单元格数据类型
                c_type = self.table.cell(i,j).ctype
                # 获取单元格数据
                c_cell = self.table.cell_value(i, j)
                if c_type == 2 and c_cell % 1 == 0:  # 如果是整形
                    c_cell = int(c_cell)
                elif c_type == 3:
                    # 转成datetime对象
                    date = datetime.datetime(*xldate_as_tuple(c_cell,0))
                    c_cell = date.strftime('%Y/%d/%m %H:%M:%S')
                elif c_type == 4:
                    c_cell = True if c_cell == 1 else False
                sheet_data[self.keys[j]] = c_cell
                # 循环每一个有效的单元格,将字段与值对应存储到字典中
                # 字典的key就是excel表中每列第一行的字段
                # sheet_data[self.keys[j]] = self.table.row_values(i)[j]
            # 再将字典追加到列表中
            datas.append(sheet_data)
        # 返回从excel中获取到的数据:以列表存字典的形式返回
        return datas
#**************正则删除某些字符元素*************



    dirlist = build_dir_name_list('../待处理文件')
    mask = re.compile(r'[_](.*?)[_]', re.S)

    for name in dirlist:
        a = re.sub(mask, "", name)
        os.rename(name, a)

#***************修改文件夹名字*******************


def replaceDirName(rootDir):  # 修改rootDir路径下的文件夹名
    num = 0
    dirs = os.listdir(rootDir)
    for dir in dirs:
        print('oldname is:' + dir)  # 输出老的名字

        num = num + 1
        temp = "%03d" % int(num)  # 主要目的是在数字统一为3位,不够的前面补0

        oldname = os.path.join(rootDir, dir)  # 老文件夹的名字
        newname = os.path.join(rootDir, temp)  # 新文件夹的名字

        os.rename(oldname, newname)  # 替换



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值