【科研】测试速通:python不同文件夹下同名图像拼接

news2024/11/23 18:46:55

论文必备图像拼接笔记

速通结果: 

现有:测试样本相同(名命相同),测试模型不同,测试结果分别保存至不同文件夹

目标:结果显示在同一张图像上

目录

论文必备图像拼接笔记

1.如果图像格式不一致,优先统一格式,此处为 jpg 转 png

2.如果名命复杂,先做批量名命处理

 3.简单明了的拼接方式


1.如果图像格式不一致,优先统一格式,此处为 jpg 转 png

import cv2
import os
 
print('----------------------------------------------------')
print('程序的功能为:将该目录下输入的文件内的图片转为指定格式')#jpg转化为png和png转化为jpg。
print('转化结果保存在当前目录下的new_picture内')
print('----------------------------------------------------')
 
son = "input copy"       #输入文件夹
picture_type = 'png'     #期望转换成png格式
daddir= './'
path = daddir + son
 
newpath = "new_picture"  #输出文件夹
if not os.path.exists(newpath):
    os.mkdir(newpath)
 
path_list=os.listdir(path)
number=0                        #统计图片数量
for filename in path_list:
    number+=1
    portion = os.path.splitext(filename)
    print('convert  ' + filename +'  to '+portion[0]+'.'+picture_type)
    img = cv2.imread(path+"/"+filename)
    cv2.imwrite("./"+newpath+"/"+portion[0]+'.'+picture_type,img)
print("共转化了%d张图片"%number)
print('转换完毕,文件存入 '+newpath+' 中')
cv2.waitKey(0)
cv2.destroyAllWindows()

2.如果名命复杂,先做批量名命处理

  • 这种的只能处理 一个文件夹的 图片名字, 有待改进;
  • 可进一步尝试循环文件夹。
import os

def rename(path):
    filelist = os.listdir(path)   # 获取指定的文件夹包含的文件或文件夹的名字的列表
    print(filelist)
    total_num = len(filelist)     #获取文件夹内所有文件个数
    
    i = 0                         # 图片名字从 0 开始
    c = 0
    for item in filelist: # 遍历这个文件夹下的文件,即 图片
        if item.endswith('png'):
            src = os.path.join(os.path.abspath(path), item)
            dst = os.path.join(os.path.abspath(path),str(i) + '.png')
            
            try:
                os.rename(src, dst)
                print ('converting %s to %s ...' % (src, dst))
                i = i + 1
                c = c + 1
            except:
                continue
    print('total %d to rename & converted %d pngs' % (total_num, i))
    print('total %d to rename & converted %d pngs' % (total_num, c))   

if __name__ == '__main__':
    path = "new_picture/"
    rename(path)

 3.简单明了的拼接方式

  • 小白易理解,高手可改进循环。
  • 注意:该方法按照数字对应拼接,确保1.jpg在所有文件夹中源自同一样本!
  • 其中skimage安装失败问题,可尝试python|安装skimage库报错:required to install pyproject.toml-based projects_
  • pip install scikit-image
    pip3 install scikit-image
    conda install scikit-image
#导入相应的包
import numpy as np
import os
import matplotlib.image as mp
from skimage import img_as_ubyte  
from PIL import Image

#本地图片存放的地址
jpg_path0 = "new_picture/"
jpg_path1 = "results_model1/"
jpg_path2 = "results_model2/"
jpg_path3 = "results_model3/"
jpg_path4 = "results_model4/"

#拼接处理后的图片保存地址
savepath = "result_visual/"
filelist0 = os.listdir(jpg_path0)
filelist1 = os.listdir(jpg_path1) #打开对应的文件夹
filelist2 = os.listdir(jpg_path2)
filelist3 = os.listdir(jpg_path3)
filelist4 = os.listdir(jpg_path4)

total_num = len(filelist1)#得到文件夹中图像的总个数

for i in range(total_num):
    jpg0 = jpg_path0 + str(i) + '.png'
    jpg1 = jpg_path1 + str(i) + '.png' #拼接图像的读取地址
    jpg2 = jpg_path2 + str(i) + '.png'
    jpg3 = jpg_path3 + str(i) + '.png'
    jpg4 = jpg_path4 + str(i) + '.png'

    #对图像数据类型转换
    image0 = mp.imread(jpg0)
    image1 = mp.imread(jpg1)
    image2 = mp.imread(jpg2)
    image3 = mp.imread(jpg3)
    image4 = mp.imread(jpg4)

    image0 = img_as_ubyte(image0)
    image1 = img_as_ubyte(image1)
    image2 = img_as_ubyte(image2)
    image3 = img_as_ubyte(image3)
    image4 = img_as_ubyte(image4)

    result_img0 = Image.fromarray(image0)
    result_img1 = Image.fromarray(image1)
    result_img2 = Image.fromarray(image2)
    result_img3 = Image.fromarray(image3)
    result_img4 = Image.fromarray(image4)

    img0 = np.array(result_img0)
    img1 = np.array(result_img1)  # 转换为多维数组对象
    img2 = np.array(result_img2)
    img3 = np.array(result_img3)  # 转换为多维数组对象
    img4 = np.array(result_img4)
    im3 = np.concatenate((img0, img1, img2, img3, img4), axis=1)  # 对图片进行横向拼接
    # 生成图片
    result_picture = Image.fromarray(im3)
    savepicture_name = savepath + str(i+1) + '.png'  #字符串拼接保存图像的地址
    result_picture.save(savepicture_name)  #保存图像



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么维护Linux VPS 服务器?简单7个步骤

维护VPS的目的是为了确保服务器网络始终畅通无阻。请注意,此列表中的任务并不是服务器维护所需完成的唯一任务。以下是 Linux VPS 服务器所有者可以做些什么来维护他们的服务器。 1.监控磁盘空间 服务器是个人服务器还是具有多个用户帐户的服务器并不重要&#xff0…

精简版SDL落地实践

一、前言一般安全都属于运维部下面,和上家公司的运维总监聊过几次一些日常安全工作能不能融入到DevOps中,没多久因为各种原因离职。18年入职5月一家第三方支付公司,前半年在各种检查中度过,监管形势严峻加上大领导对安全的重视(主…

【数据结构】二叉树(C语言实现)

文章目录一、树的概念及结构1.树的概念2.树的相关概念名词3.树的表示4.树在实际中的运用二、二叉树概念及结构1.二叉树的概念2.特殊的二叉树3.二叉树的性质4.二叉树的存储结构三、二叉树链式结构的实现1.结构的定义2.构建二叉树3.二叉树前序遍历4.二叉树中序遍历5.二叉树后序遍…

QWebEngineView 类 详细使用说明

文章目录 一、前言 二、详述 三、属性 四、公共函数 五、重新实现的公共函数 六、公共槽函数 七、信号 八、保护函数 九、重新实现的受保护函数 10、总结 一、前言 原文链接 QWebEngineView类提供了一个小部件&#xff0c;用于查看和编辑Web文档。 Header: #include < …

【Web安全-MSF记录篇章一】

文章目录前言msfvenom生成远控木马基本系统命令webcam 摄像头命令常用的信息收集脚本注册表设置nc后门开启 rdp&添加用户获取哈希mimikatz抓取密码前言 最近打站&#xff0c;可以感觉到之前的学的渗透知识忘记很多。。。。。多用多看多练&#xff0c;简单回顾一下 msfven…

2023年了,零基础小白转行IT学习Java还有前途吗?

“2023年了&#xff0c;转行IT学习Java是不是已经听过看过很多次了&#xff0c;Java从出现到现在有多少年了呢&#xff1f;掐指一算&#xff0c;Java是1995年由Sun公司推出的一款高级编程语言……距今已有28年了&#xff01; Sun公司都被收购了&#xff0c;莫不是Java也要垮台了…

Android实现Dribbble上动感的Gallery App Icon

先来看看原Dribbble上动感的Gallery App Icon效果图思路拆解一下&#xff0c;还是比较简单&#xff0c;需要绘制的有&#xff1a;圆形背景太阳(圆形)山(三角形)云朵(圆角矩形 三个圆)需要进行的动画&#xff1a;太阳 - 旋转动画山 - 上下平移动画云朵 - 左右平移动画不必绘制圆…

随想录二刷 (双指针法) leetcode 27 26 283 844

双指针法的原理 双指针法相对于暴力解法的优点有以下几点 暴力遍历的时间复杂度会比较高双指针法利用两个指针进行遍历完成双层循环所做的事情 双指针一般有两种方法 同向指针&#xff0c;双向指针 第一题 leetcode 27 移除元素 题目描述 题目分析 采用暴力遍历可以得出结…

vector的基本使用

目录 介绍&#xff1a; vector iterator 的使用 增删查改 增&#xff08;push_back insert&#xff09;&#xff1a; 删(pop_back erase)&#xff1a; swap&#xff1a; vector的容量和扩容&#xff1a; 排序&#xff08;sort&#xff09;&#xff1a; 介绍&#xff…

SpringBoot入门(二)

这里写目录标题一、SpringBoot整合Junit1.1 搭建SpringBoot工程1.2 引入starter-test起步依赖1.3 编写类1.4 测试二、SpringBoot整合mybatis2.1 搭建SpringBoot工程2.2 引入mybatis起步依赖&#xff0c;添加驱动2.3 编写DataSource和MyBatis相关配置2.4 定义表和实体类2.5 编写…

100%BIM学员的疑惑:不会CAD可以学Revit吗?

在新一轮科技创新和产业变革中&#xff0c;信息化与建筑业的融合发展已成为建筑业发展的方向&#xff0c;将对建筑业发展带来战略性和全局性的影响。 建筑业是传统产业&#xff0c;推动建筑业科技创新&#xff0c;加快推进信息化发展&#xff0c;激发创新活力&#xff0c;培育…

apk中代码执行adb指令实现

背景&#xff1a;想要在android apk中直接使用adb指令&#xff0c;从而不需要把手机通过数据线方式连接到电脑&#xff0c;在电脑端执行adb指令。 一、权限相关 想要在apk代码中执行adb命令&#xff0c;涉及到执行权限。 首先手机需要有root权限。其次就算手机已经root了&…

yolov5/6/7系列模型训练日志结果数据对比分析可视化

早在之前使用yolov3和yolov4这类项目的时候可视化分析大都是自己去做的&#xff0c;到了yolov5的时候&#xff0c;变成了一个工具包了&#xff0c;作者全部集成进去了&#xff0c;这里我们以一个具体的结果为例&#xff0c;如下&#xff1a;整个训练过程产生的指标等数据都会自…

11.3 基于Django4的可重用、用户注册和登录系统搭建(优化)

文章目录邮件注册发送邮件功能测试基本的邮件注册功能实现完成注册表单完成注册的业务逻辑密码加密功能实现邮件注册确认创建模型修改视图测试处理邮件确认请求修改登录规则测试邮件注册 根据官方文档进行&#xff1a;https://docs.djangoproject.com/zh-hans/4.1/topics/emai…

什么是智慧实验室?

智慧实验室是利用现代信息技术和先进设备将实验室实现智能化和智慧化的概念。通过将各种数据、信息和资源整合在一起&#xff0c;实现实验室设备的互联互通&#xff0c;数据的实时采集、传输、处理和分析&#xff0c;从而提高实验室的效率、精度和可靠性。一、智慧实验室包含多…

Java~对于代码块与内部类的理解

目录 代码块 普通代码块 构造代码块 静态代码块 内部类 成员内部类 普通内部类 静态内部类 局部内部类 代码块 使用“{}”定义的一段代码成为代码块&#xff0c;代码块分为普通代码块、构造代码块、匿名代码块、同步代码块。 普通代码块 定义在方法中的代码&#x…

【go语言之thrift协议一】

go语言之thrift协议thrift文件shared.thriftSharedStructSharedServiceSharedServiceProcessorSharedServiceGetStructArgsSharedServiceGetStructResulttutorial.thrift基本数据类型引入其他thrift文件自定义类型定义常量enum继承thrift 相对于grpc而言&#xff0c;可能用的不…

逆向-还原代码之max 再画堆栈图 (Interl 64)

// source code #include <stdio.h> void max(int * a, int * b) { if (*a < *b) *a *b; } int main() { int a 5, b 6; max(&a, &b); printf("a, b max %d\n", a); return 0; } // 再画堆栈图 下周一&#xff08;2.27…

JavaEE简单示例——MyBatis关联映射

简单介绍&#xff1a; 在我们之前的案例中&#xff0c;我们进行了简单查询&#xff0c;条件产村&#xff0c;动态SQL的条件查询&#xff0c;但是这些操作都是在一张表中进行的&#xff0c;而在我们之前学习MySQL中还有一个很重要的操作就是多表查询操作&#xff0c;也就是说通…

图像亮度调整

非线性方式 调整图像的方法有很多&#xff0c;最常用的方法就是对图像像素点的R、G、B三个分量同时进行增加&#xff08;减少&#xff09;某个值&#xff0c;达到调整亮度的目的。即改变图像的亮度&#xff0c;实际就是对像素点的各颜色分量值做一个平移。这种方法属于非线性的…