常用的图像处理代码(实时更新中)

前言

在各种比赛、项目的经历中,发现有些代码文件总是用来用去。因此,为了方便自己,也方便大家,将一些自己常用的代码分享一下。

正文

目录下文件的改名

简介

对路径下的所有图片进行改名。

  1. 使用glob库读取文件
  2. 使用os库改名
代码
"""
功能:文件夹下的图片统一改名
"""
import glob
import os

if __name__=="__main__":
    path="./*"
    path_list=glob.glob(path)
    for x in path_list:
        #以下部分根据实际情况替换
        if x[2]!="C":
            temp = x+"/*"
            path_ = glob.glob(temp)
            for index,i in enumerate(path_):
                try:
                    # print(i)
                    # print(x+"/"+str(index)+".jpg")
                    os.rename(i,x+"/"+str(index)+".jpg")
                except Exception as e:
                    print(e)
                    print('rename file fail\r\n')
                else:
                    # print(i)
                    # print(path+str(index)+".jpg")
                    print('rename file success\r\n')
                

批量图片修改尺寸

简介

对路径下的所有图片进行尺寸修改。

  1. 使用thread进行批量修改
  2. 使用glob读取图片
  3. 使用cv2进行图片操作

代码

#Antuor:龙文汉
#data:2020.11.20
#Discription:批量修改图像尺寸

import glob
import cv2
import threading
import os
import sys
import time

class Photo_chan:
    def __init__(self,dir,save_dir,size):
        """
        :param dir: 原路径
        :param save_dir: 保存路径
        :param size: 图片新尺寸
        """
        self.dir = dir
        self.save_dir = save_dir
        self.photo_list = []
        self.name_list = []
        self.size = size
        self.count = 0

    def Resize_image(self,photo_list,save_dir):
        """
        :param photo_list: 图片地址的列表
        :param save_dir:保存的地址
        :return:
        """
        # print(photo_list)
        for x,i in enumerate(photo_list):
            # print(x)
            print ("%s: %s" % (name, time.ctime(time.time())))
            img = cv2.imread(i)
            img = cv2.resize(img,self.size,cv2.INTER_AREA)
            #print(save_dir)
            if not os.path.isdir(save_dir):
                os.mkdir(save_dir)
            else:
                #print(save_dir + str(x)+".jpg")
                cv2.imwrite(save_dir + str(x)+".jpg", img)

    def Begin(self,ph):
        self.dir = glob.glob(self.dir+"\\*")
        thread_list = []
        
        f1 = open("E:\\deeplearning\\pic\\test.txt","w")
        for i in self.dir:
            x = i.split("\\")[-1]
            print(x)
            f1.write(str(x)+"\n")
        f1.close()

class myThread (threading.Thread):
    def __init__(self, threadID, name, photo_list,save_dir,ph):
        """
        :param threadID: 线程ID
        :param name: 线程名
        :param photo_list: 图片名字列表
        :param save_dir: 保存路径
        :param ph: 自定义的函数
        """
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.photo_list = photo_list
        self.save_dir = save_dir
        self.ph = ph

    def run(self):
        print ("开始线程:" + self.name)
        self.ph.Resize_image(self.photo_list,self.save_dir,self.name)
        print ("退出线程:" + self.name)


if __name__ == "__main__":
    ph = Photo_chan("E:\\deeplearning\\pic\\pic",".\\after_image",(320,320))
    ph.Begin(ph)
    #print(glob.glob(r".\image\jinyinhua\*.jpg"))

混淆矩阵

简介

根据输入的参数,回值混淆矩阵。

  1. 使用matplotlib进行绘画。
  2. 使用glob进行文件读取
  3. 使用numpy对矩阵进行操作

代码

import matplotlib as plt
import glob
import numpy as np


#confusion_matrix
def Mat(classes_name,confuse,save_name,index=0):
    """
    画混淆举证
    :param classes_name:输入种类名称作为横纵坐标的值
    :param confuse: 混淆矩阵
    :param save_name: 保存名
    :param index: 当前索引,可忽略
    :return:
    """
    classes = classes_name
    confusion_matrix = np.array(confuse,dtype=np.float64)
 
    plt.imshow(confusion_matrix, interpolation='nearest', cmap=plt.cm.Oranges)  #按照像素显示出矩阵
    plt.title(index+'_Confusion_matrix')
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes,rotation=60)
    plt.yticks(tick_marks, classes)
 
    thresh = confusion_matrix.max() / 2.
    #iters = [[i,j] for i in range(len(classes)) for j in range((classes))]
    #ij配对,遍历矩阵迭代器
    iters = np.reshape([[[i,j] for j in range(len(confusion_matrix))] for i in range(len(confusion_matrix))],(confusion_matrix.size,2))
    # for i, j in iters:
    #     plt.text(j, i, format(confusion_matrix[i, j]))   #显示对应的数字
 
    plt.ylabel('Real label')
    plt.xlabel('Prediction')
    plt.tight_layout()
    #plt.show()
    plt.savefig(save_name)



def main(args):
    Mat(type_name,confuse,args.confuse_save+"_confuse_mat.jpg",args.confuse_save.split("/")[-1]) #输入种类名和混淆矩阵

切割图像

简介

根据输入的尺寸比例,讲一张图片切割为多张图片.

  1. 使用cv2进行图像操作
  2. 使用glob进行文件读取
  3. 使用thread进行批量修改
  4. 使用copy进行复制

代码

import cv2
import glob
import threading
import os
import copy

class Cut_photo:
    def __init__(self,ori_dir,size=(3,3)):
        """
        对图像进行切割
        :param ori_dir: 原始路径
        :param size: 切割大小,默认切割成新的3*3,共9张图片
        """
        self.ori_dir = ori_dir
        self.size = size
        self.w = self.size[0]
        self.h = self.size[1]
        self.image_path = glob.glob(self.ori_dir+"/*")

    def Cuting(self,single_image_path):
        img = cv2.imread(single_image_path)
        o_w, o_h, o_c = img.shape
        w = int(o_w / self.w)
        h = int(o_h / self.h)
        c = o_c
        after_image = []
        for i in range(0, self.w):
            temple = copy.deepcopy(img[i * w:(i + 1) * w, :, :])
            for x in range(0, self.h):
                after_image.append(copy.deepcopy(temple[:, x * h:(x + 1) * h, :]))
        for x, i in enumerate(after_image):
            save_dir = single_image_path.replace(".jpg", "_" + str(x) + ".jpg")
            print(save_dir)
            cv2.imwrite(save_dir, i)

    def Begin(self):
        for i in self.image_path:
            print(i)
            thread = threading.Thread(target=self.Cuting,args=[i])
            thread.start()
            thread.join()

if __name__ == "__main__":
    test_photo = "1-1.jpg"

    for i in range(1,7):
        photo_dir = "./type_"+str(i)
        my_cut = Cut_photo(photo_dir)
        my_cut.Begin()
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Matlab是一种常用的编程语言,特别适合图像处理方面,其卷积神经网络(CNN)的代码实现可以通过以下步骤完成。 首先,我们需要导入所需的图像数据集,例如MNIST手写数字数据集或CIFAR-10数据集。然后,我们要对图像数据进行预处理,包括裁剪、缩放和归一化处理,以便于CNN模型的训练和测试。 接下来,我们需要设计CNN模型的结构,包括卷积层、池化层、全连接层和激活函数等。在Matlab,我们可以使用深度学习工具箱提供的函数来创建和配置CNN模型。 然后,我们需要定义损失函数和优化器,以便于训练过程对模型进行参数更新和优化。在Matlab,我们可以使用内置的优化器函数和损失函数来实现这一步骤。 接着,我们可以使用训练集对CNN模型进行训练,并使用验证集对模型进行验证和调参,以获得最优的模型参数和性能。 最后,我们可以使用测试集对训练好的CNN模型进行评估和预测,从而得到模型在新数据上的预测能力。 通过以上步骤,我们可以在Matlab实现CNN图像处理代码,并且可以通过调整模型的结构和参数来适应不同的图像处理任务,如图像分类、目标检测和图像分割等。同时,Matlab还提供了丰富的可视化工具,可以帮助我们直观地理解和分析CNN模型的训练和预测过程。 Matla 总之,Matlab提供了强大的工具和函数库,可以帮助我们实现各种复杂的CNN图像处理任务,并且可以通过简单的代码和接口来实现高效的图像处理算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hanzoe_lwh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值