C# OpenCvSharp 图片批量改名

目录

效果

项目

代码

下载


C# OpenCvSharp 图片批量改名

效果

项目

代码

using NLog;
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;

namespace OpenCvSharp_Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            NLog.Windows.Forms.RichTextBoxTarget.ReInitializeAllTextboxes(this);
        }

        private static Logger _log = NLog.LogManager.GetCurrentClassLogger();

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        string inPath = "";
        string outPath = "";
        DirectoryInfo folder;
        List<FileInfo> files=new List<FileInfo>();
        String[] imageExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
        
        /// <summary>
        /// 选择文件夹
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            inPath = "";
            outPath = "";
            files.Clear();
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            dialog.Description = "请选择文件路径";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                inPath = dialog.SelectedPath;
                textBox1.Text = inPath;
                outPath = inPath + "\\out";
                textBox2.Text = outPath;

                _log.Info("图片路径:" + inPath);
                _log.Info("保存路径:" + outPath);

                folder = new DirectoryInfo(inPath);
                var temp = folder.GetFiles("*.*", SearchOption.TopDirectoryOnly);
                foreach (FileInfo file in temp)
                {
                    if (imageExtensions.Contains(file.Extension.ToLower()))
                    {
                        files.Add(file);
                    }
                }
                _log.Info("一共["+ files .Count()+ "]张图片");
            }

        }

        /// <summary>
        /// 修改名称
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            if (files.Count()==0)
            {
                return;
            }
            outPath = textBox2.Text;
            //目录不存在 则创建
            if (!Directory.Exists(outPath))
            {
                DirectoryInfo directoryInfo = new DirectoryInfo(outPath);
                //创建目录
                directoryInfo.Create();
            }
            else {

                DirectoryInfo outFolder=new DirectoryInfo(outPath);
                if (outFolder.GetFiles("*.*", SearchOption.AllDirectories).Length>0)
                {
                    MessageBox.Show(outPath + "文件夹不为空,防止数据被覆盖,请更换!");
                    return;
                }
            }
          
            string oldName;
            string newName;
            Mat temp;
            int index = 0;
            foreach (FileInfo file in files)
            {
                oldName = file.Name;
                newName = index.ToString() + file.Extension;
                try
                {
                    temp = new Mat(inPath + "\\" + oldName);
                    //其他处理 ,例如
                    //图片缩放
                    //通道变换等
                    //……
                    Cv2.ImWrite(outPath + "\\" + newName, temp);
                    _log.Info(oldName + "-->" + newName);
                    index++;
                }
                catch (Exception ex)
                {
                    _log.Info(oldName+"修改异常,异常信息:"+ex.Message);
                }
            }

            _log.Info("全部修改完成!");
        }
    }
}

using NLog;
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;namespace OpenCvSharp_Demo
{public partial class Form1 : Form{public Form1(){InitializeComponent();NLog.Windows.Forms.RichTextBoxTarget.ReInitializeAllTextboxes(this);}private static Logger _log = NLog.LogManager.GetCurrentClassLogger();private void Form1_Load(object sender, EventArgs e){}string inPath = "";string outPath = "";DirectoryInfo folder;List<FileInfo> files=new List<FileInfo>();String[] imageExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };/// <summary>/// 选择文件夹/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){inPath = "";outPath = "";files.Clear();FolderBrowserDialog dialog = new FolderBrowserDialog();dialog.Description = "请选择文件路径";if (dialog.ShowDialog() == DialogResult.OK){inPath = dialog.SelectedPath;textBox1.Text = inPath;outPath = inPath + "\\out";textBox2.Text = outPath;_log.Info("图片路径:" + inPath);_log.Info("保存路径:" + outPath);folder = new DirectoryInfo(inPath);var temp = folder.GetFiles("*.*", SearchOption.TopDirectoryOnly);foreach (FileInfo file in temp){if (imageExtensions.Contains(file.Extension.ToLower())){files.Add(file);}}_log.Info("一共["+ files .Count()+ "]张图片");}}/// <summary>/// 修改名称/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){if (files.Count()==0){return;}outPath = textBox2.Text;//目录不存在 则创建if (!Directory.Exists(outPath)){DirectoryInfo directoryInfo = new DirectoryInfo(outPath);//创建目录directoryInfo.Create();}else {DirectoryInfo outFolder=new DirectoryInfo(outPath);if (outFolder.GetFiles("*.*", SearchOption.AllDirectories).Length>0){MessageBox.Show(outPath + "文件夹不为空,防止数据被覆盖,请更换!");return;}}string oldName;string newName;Mat temp;int index = 0;foreach (FileInfo file in files){oldName = file.Name;newName = index.ToString() + file.Extension;try{temp = new Mat(inPath + "\\" + oldName);//其他处理 ,例如//图片缩放//通道变换等//……Cv2.ImWrite(outPath + "\\" + newName, temp);_log.Info(oldName + "-->" + newName);index++;}catch (Exception ex){_log.Info(oldName+"修改异常,异常信息:"+ex.Message);}}_log.Info("全部修改完成!");}}
}

下载

源码下载

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

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

相关文章

Rabbitmq---topics模型之动态路由

fanout广播模型&#xff0c;只要生产者一发送&#xff0c;交换机会把所有的消息发给所有的广播者。在广播模式中&#xff0c;一条消息会被所有订阅的队列都消费&#xff0c;但是在某种场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时候就要用到direct的类型的交换…

Go语言的HTTP WEB Demo案例

Go 语言 Go 是一个开源的编程语言&#xff0c;它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发&#xff0c;后来还加入了Ian Lance Taylor, Russ Cox等人&#xff0c;并最终于2009年11月开源&#xff0c;在20…

用python实现选择排序

选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法。它的工作原理是首先在未排序序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后再从剩余未排序元素中继续寻找最小&#xff08;或最大&#xf…

webpack5基础--14_优化css

Css 处理 提取 Css 成单独文件 Css 文件目前被打包到 js 文件中&#xff0c;当 js 文件加载时&#xff0c;会创建一个 style 标签来生成样式 这样对于网站来说&#xff0c;会出现闪屏现象&#xff0c;用户体验不好 我们应该是单独的 Css 文件&#xff0c;通过 link 标签加载…

微信小程序仿QQ头像轮播效果

1、效果图 2、效果流程分析 1、第1个头像大小从1到0缩小的同时&#xff0c;第2个头像左移 2、上面动画结束后&#xff0c;延迟50ms&#xff0c;第3个头像从0到1放大 3、把头像列表顺序前移一位&#xff0c;并重置轮播状态&#xff0c;以此达到一个循环。然后继续第一个步骤 …

C++之虚函数表

一、概念 虚函数表是一个存在指向虚函数的指针数组&#xff0c;每一个带有虚函数的类都有一个虚函数表。虚函数表与虚函数一样是可以继承。这个表的每一个数组的值都是指向虚函数的指针。 二、虚函数表如何继承与重写 1、一个类继承另外一个带有虚函数的类&#xff0c;并且没…

【LeetCode】递归遍历 144.94.145 二叉树的前序遍历、中序遍历、后序遍历

今日学习的文章链接和视频链接 leetcode题目地址&#xff1a;144.二叉树的前序遍历 leetcode题目地址&#xff1a;94. 二叉树的中序遍历 leetcode题目地址&#xff1a;145. 二叉树的后序遍历 代码随想录题解地址&#xff1a;代码随想录 题目简介 给你二叉树的根节点 root &…

Java旋转矩阵

题目&#xff1a; 给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 示例 1: 给定 matrix [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵&…

3.11笔记3

3.11知识点3 1. break 语句和 continue 语句有什么区别&#xff1f;2. 使用 goto 计算 1-23-4......99-100 的值。3. 输入一个整数&#xff0c;判断这个数是不是素数。4. 写程序生成前 100 个素数。56. (a) 对于一个大小为N的数组&#xff0c;它的下标范围是多少&#xff1f;7.…

wins10安装ffmpeg

官网下载 点击进入官网&#xff1a;ffmpeg&#xff0c;官网地址&#xff1a;https://ffmpeg.org/download.html 点击上图中Windows图标选中后下面显示的第一行进入如下界面&#xff0c;在release builds第一个绿框里面选择一个版本下载&#xff1a; 下载好之后解压后&#xf…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PatternLock)

图案密码锁组件&#xff0c;以九宫格图案的方式输入密码&#xff0c;用于密码验证场景。手指在PatternLock组件区域按下时开始进入输入状态&#xff0c;手指离开屏幕时结束输入状态完成密码输入。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#…

GO语言-切片底层探索(上)

目录 1.前言 2. 算法题目 错误代码 3. 错误分析 4.总结&#xff1a; 5.正确代码&#xff1a; 6.本地测试代码&#xff1a; 1.前言 今天在力扣上写算法&#xff0c;遇到了一个比较"奇怪"的错误。由于自己使用了递归切片&#xff0c;导致一开始没有看明白&…

力扣最热100题——56.合并区间

吾日三省吾身 还记得梦想吗 正在努力实现它吗 可以坚持下去吗 目录 吾日三省吾身 力扣题号&#xff1a;56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 题目描述 Java解法一&#xff1a;排序然后原地操作 具体代码如下 Java解法二&#xff1a;new一个list&#xf…

(delphi11最新学习资料) Object Pascal 学习笔记---第7章第1节(引入类和对象)

第7章 对象 ​ 即使你没有面向对象编程&#xff08;OOP&#xff09;的详细知识&#xff0c;本章也将介绍每一个关键概念。如果你已经精通OOP&#xff0c;你可以相对快速地浏览材料&#xff0c;并将重点放在Object Pascal语言的细节上&#xff0c;与你可能已经掌握的其他语言进…

分布式ID(7):Zookeeper实现分布式ID生成

1 原理 实现方式有两种,一种通过节点,一种通过节点的版本号 节点的特性持久顺序节点(PERSISTENT_SEQUENTIAL) 他的基本特性和持久节点是一致的,额外的特性表现在顺序性上。在ZooKeeper中,每个父节点都会为他的第一级子节点维护一份顺序,用于记录下每个子节点创建的先后顺序…

虚拟机中安装Win98

文章目录 一、下载Win98二、制作可启动光盘三、VMware中安装Win98四、Qemu中安装Win981. Qemu的安装2. 安装Win98 Win98是微软于1998年发布的16位与32位混合的操作系统&#xff0c;也是一代经典的操作系统&#xff0c;期间出现了不少经典的软件与游戏&#xff0c;还是值得怀念的…

Kafka - This server does not host this topic-partition

问题描述 org.apache.kafka.common.errors.UnknownTopicOrPartitionException: This server does not host this topic-partition 原因分析 分区数据不在。producer 向不存在的 topic 发送消息 解决方案 用户可以检查 topic 是否存在设置 auto.create.topics.enable 参数

【LiveVideoStack】批量下载公众号文章

livevideostack暂停商业运行 官方建议关注文章保存,因此: y9000p 上运行: xiaoguyu / wechatDownload 大神太厉害了,工具软件很好很强大 windows 试试直接安装、编译、运行 zhangbin@LAPTOP-DFV9CMRA MINGW64 /g/ISOFT/livevideostack $ git clone https://github.com/xiao…

安卓多个listView拖动数据交换位置和拖动

注意这里只是给出大概思路&#xff0c;具体可以参考修改自己想要的 public class MainActivity extends AppCompatActivity {private ListView listView1;private ListView listView2;private ArrayAdapter<String> adapter1;private ArrayAdapter<String> adapter…

研发效能DevOps: OpenEuler 部署 drone 持续集成平台

目录 一、实验 1.环境 2.OpenEuler 部署 drone 持续集成平台 二、问题 1.drone登录失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 192.168.204.145&#xff08;动态&#xff09; 192.168.204.141&…