文章目录

  • 前言
  • 一、完整代码
  • 二、实现效果

前言

第一份代码实现了批量修改同一文件夹下图片的尺寸,有其他需求时仅需修改处理部分的代码以及文件夹路径。
第二份代码实现了批量截取同一文件夹下每张图片的ROI区域作为结果保存,注意截取后按下enter键才会跳到下一张图片,同时若是对已经截取的不满意只要不按下enter键都是可以重新选择的,这都得益于selectROI函数。
参考了文章:
opencv——批量处理图片并保存

但是编译时发现了问题,debug发现是下面一行代码出了问题。

savedfilename = dest + filenames[i].substr(55);

报错:

[[noreturn]] static void _Xlen()

经过百度,发现代码中的55意味着path的字符串长度。修改代码为

int len = path.length();
savedfilename = dest + filenames[i].substr(len);

问题解决。


一、完整代码

代码1:

#include <opencv2/opencv.hpp>
#include "opencv2/features2d.hpp"
#include <vector>
#include <algorithm>
#include <iostream>
#include "windows.h"
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <fstream>
#define WINDOW_NAME "【程序窗口】"
using namespace cv;
using namespace std;
int main()
{cv::String path = "D:/opencv_picture_test/视觉项目新/";        //待处理图片文件夹地址cv::String dest = "D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/";    //处理后图片的保存地址cout << "获取地址成功"<< endl;cv::String savedfilename;std::vector<cv::String> filenames;int len = path.length();cv::Mat srcImg, dstImg;cv::glob(path, filenames);                 //opencv里面用来读取指定路径下文件名的一个很好用的函数for (int i = 0; i < filenames.size(); i++) {srcImg = cv::imread(filenames[i]);//*************************对图片的处理部分***************************///这里我们批量修改图片的大小resize(srcImg, dstImg,Size(600,450));//********************************************************************/savedfilename = dest + filenames[i].substr(len);std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, dstImg);cout << "第" << i << "张完成" << endl;}waitKey(0);return 0;
}

代码2:

#include <opencv2/opencv.hpp>
#include "opencv2/features2d.hpp"
#include <vector>
#include <algorithm>
#include <iostream>
#include "windows.h"
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <fstream>
#define WINDOW_NAME "【程序窗口】"
using namespace cv;
using namespace std;
int main()
{//改变控制台字体颜色system("color 02");cv::String path = "D:/opencv_picture_test/视觉项目resize后的图片夹/测试图片夹/";        //待处理图片文件夹地址cv::String dest = "D:/opencv_picture_test/视觉项目resize后的图片夹/模板图片夹/";    //处理后图片的保存地址cout << "获取地址成功" << endl;cv::String savedfilename;std::vector<cv::String> filenames;int len = path.length();cv::Mat srcImg, dstImg;cv::glob(path, filenames);                 //opencv里面用来读取指定路径下文件名的一个很好用的函数for (int i = 0; i < filenames.size(); i++) {srcImg = cv::imread(filenames[i]);//*************************对图片的处理部分***************************///这里我们批量选择原图中的某块ROI区域作为结果保存Rect2d r;r = selectROI(srcImg, true);  //选择一个矩形roi区域dstImg = srcImg(r);           //此区域为模板区域destroyAllWindows();//********************************************************************/savedfilename = dest + filenames[i].substr(len);std::cout << savedfilename << std::endl;cv::imwrite(savedfilename, dstImg);cout << "第" << i << "张完成" << endl;waitKey(30);}return 0;
}

有些多余的头文件可以不添加。

二、实现效果


resize后:

截取后的图:


Opencv——批量处理同一文件夹下的图片(解决savedfilename = dest + filenames[i].substr(len)问题)相关推荐

  1. 批量处理不同文件夹下同名图片到相同文件内,简单处理

    批量处理不同文件夹下同名图片到相同文件内 第一步:在不同文件夹下搜索同名图片名称 例如在我的多个_json文件夹下存在同名的图片img.png,因此利用搜索功能将所有_json下的img.png图片全 ...

  2. python批量生成文件夹_python实现批量获取指定文件夹下的所有文件的厂

    本文实例讲述了python实现批量获取指定文件夹下的所有文件的厂商信息的方法.分享给大家供大家参考.具体如下: 功能代码如下: import os, string, shutil,re import ...

  3. 利用python批量查询企业信息_python实现批量获取指定文件夹下的所有文件的厂商信息...

    本文实例讲述了python实现批量获取指定文件夹下的所有文件的厂商信息的方法.分享给大家供大家参考.具体如下: 功能代码如下: import os, string, shutil,re import ...

  4. 对一个文件夹下的图片进行批量缩放(resize)处理

    文章目录 问题背景 环境配置 完整代码 代码解释 另一种更简单的写法 问题背景 使用GPU训练时,有时出现了图片太大,导致处理起来速度慢或内存不够崩掉的情况,因此需要对原图片进行缩放. 本文介绍了批量 ...

  5. 批量安装当前文件夹下的exe文件

    在 Windows 中,可以使用批处理脚本(.bat 文件)来批量安装当前文件夹下的 exe 文件. 下面是一个示例脚本,它将在当前文件夹下搜索所有 exe 文件并逐个运行它们: for /r %i ...

  6. Windows 下 C++ 利用 OpenCV glob 函数获取文件夹下所有文件绝对路径

    绪论 本文记录 Windows 下 C++ 利用 OpenCv glob 函数得到 文件夹下所有文件的绝对路径(含文件名).本文还含有 std::string::find()等函数的记录.如果是 Py ...

  7. win10使用命令行批量压缩同一个文件夹下的所有文件

    win10使用cmd批量压缩同一个文件夹下的所有数据文件 整理教程数据准备上传时用到,记录一下. 目标:遍历一个文件夹下的所有.npy文件(根据需要更换成其他格式),压缩成同名的.zip文件,并放在d ...

  8. vue+springboot-前台怎么回显本地文件夹下的图片

    如果你想在前端回显本地文件夹下的图片,那么你就要在上传图片的时候将图片上传的路径设置成后台项目文件夹的路径,在浏览器输入地址即可访问.上传到服务器的我就先不举例了. 图片上传的位置: 后台端口:818 ...

  9. python opencv 实现从一个文件夹中读取图片做切割处理后放入另一个文件夹

    python opencv 实现从一个文件夹中读取图片切割处理后放入另一个文件夹. 实现的功能是把一个文件夹里的图片作处理,即把原图片中心为起点切割成1536*1536的图片,原图片必须大于这个的大小 ...

最新文章

  1. ActionDescriptor 的认识
  2. 用太极拳讲分布式理论,真舒服!
  3. AI模型加速进入万亿级时代,中国AI算力独占全球三成
  4. python asyncio与aiohttp_python链家网异步IO爬虫,使用asyncio、aiohttp和aiomysql
  5. 【NLP】使用Transformer模型进行文本分类
  6. /dev/mtdN和/dev/mtdblockN的区别
  7. 今天就唠叨唠叨吧……
  8. 平台api对数据收集的影响_收集您的数据不是那么怪异的api
  9. 创建型、结构型、行为型模式(1)
  10. ASP.NET MVC2之Model Binder
  11. Windows XP Home Edition安裝 IIS 的方法
  12. Code snippet of the day : Get Chinese Spell in C#
  13. 计算机控制课设串级回路,计算机控制系统课程设计
  14. Extjs实现角色权限流控制,对fieldset,checkbox的动态控制
  15. 福利福利!来自阿里巴巴的26款超牛Java开源项目!
  16. phalcon index.php,phalcon简易指南
  17. Elo第四代触摸一体机发布,助力全场景数字化转型
  18. Jira-使用docker安装jira(支持最新版本)
  19. wp安装install.php,wordpress安装包怎么安装
  20. python遍历文件夹中的所有jpg文件

热门文章

  1. 《javaScript100例|04》自动播放——Js幻灯片缓冲效果
  2. 微信限量纪念版code封面来啦,速看领取方式
  3. angular 数字逗号分隔_angular 实现的输入框数字千分位及保留几位小数点功能示例...
  4. pr基本图形模板无法使用_PR模板21个时尚排版竖屏封面图形标题动画【资源分享1218】...
  5. flutter ios打包_Flutter通过BasicMessageChannel与Android iOS 的双向通信
  6. 小米3显示sim卡无服务器,小米手机无服务怎么解决
  7. linux 秒数转时间格式,通过delphi将秒数转换成日期格式
  8. jQuery.extend() 使用语法详解
  9. TypeScript 交叉类型(intersection type)
  10. 第四章 生命周期函数--35 vue-resource发起get、post、jsonp请求