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

文章目录

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


前言

第一份代码实现了批量修改同一文件夹下图片的尺寸,有其他需求时仅需修改处理部分的代码以及文件夹路径。
第二份代码实现了批量截取同一文件夹下每张图片的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后:
在这里插入图片描述
截取后的图:
在这里插入图片描述


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

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

相关文章

处理文件、摄像头和图形用户界面

1、基本I/O脚本 1.1 读/写图像文件 import numpy import cv2#利用二维Numpy数组简单创建一个黑色的正方形图像 img numpy.zeros((3,3),dtypenumpy.uint8) img #结果为&#xff1a;array([[0, 0, 0],[0, 0, 0],[0, 0, 0]], dtypeuint8)img.shape#结果为&#xff1a;(3, 3)###…

linux桌面天气,Ubuntu 14.10中安装和配置天气应用

对于操作系统平台而言&#xff0c;有各种小插件功能方便用户日常应用。在Ubuntu桌面中提供天气信息的功能&#xff0c;可以使用Unity Dash和桌面应用来获得相关信息&#xff0c;比如Typhoon。但对于用户而言&#xff0c;可以提供快速查询天气状况和温度数据&#xff0c;并且只需…

linux批处理操作系统_批处理操作系统

linux批处理操作系统批处理操作系统 (Batch Processing Operating System) When we are working in an environment there is a restriction of making use of computer resources effectively and improvement in the programmers output. When we are working with tapes a l…

STL容器及其简单应用(stack、priority_queue、vector、deuqe、list、map/multimap、set/multiset)

目录前言【1】stack操作以及应用stack的几个核心接口利用stack完成进制转换【2】priority_queue操作以及应用priority_queue的几个核心接口利用priority_queue完成合并果子问题【3】vector操作以及应用vector的几个核心接口利用vector完成随机排序【4】deuqe(双向队列)操作以及…

已知一个掺杂了多个数字字符的中文名拼音,去掉所有数字字符之后,形式为“名”+空格+“姓”;并且名和姓的首字母大写,其他小写,要求输出姓名全拼,且全为小写。(后附详细样例说明)

已知一个掺杂了多个数字字符的中文名拼音&#xff0c;去掉所有数字字符之后&#xff0c;形式为“名”空格“姓”&#xff1b;并且名和姓的首字母大写&#xff0c;其他小写&#xff0c;要求输出姓名全拼&#xff0c;且全为小写。&#xff08;后附详细样例说明&#xff09; 【输入…

在一个风景秀丽的小镇,一天早上,有N名晨跑爱好者(编号1~N)沿着优雅的江边景观道朝同一方向进行晨跑

【问题描述】 在一个风景秀丽的小镇&#xff0c;一天早上&#xff0c;有N名晨跑爱好者(编号1~N)沿着优雅的江边景观道朝同一方向进行晨跑&#xff0c;第i名跑者从位置si处起跑&#xff0c;且其速度为Vi。换句话说&#xff0c;对所有的实数t≥0&#xff0c;在时刻t时第i名跑者的…

linux内核测试,Linux内核测试的生命周期

内核持续集成(CKI)项目旨在防止错误进入 Linux 内核。在 Linux 内核的持续集成测试 一文中&#xff0c;我介绍了 内核持续集成Continuous Kernel Integration(CKI)项目及其使命&#xff1a;改变内核开发人员和维护人员的工作方式。本文深入探讨了该项目的某些技术方面&#xff…

【视觉项目】【day3】8.22号实验记录(利用canny检测之后的来进行模板匹配)

【day3】8.22号实验记录&#xff08;几乎没干正事的一天&#xff0c;利用canny检测之后的来进行模板匹配&#xff09; 今天没搞代码&#xff0c;主要是问研究生学长工业摄像头的接法的&#xff0c;学长也不知道&#xff0c;明天问问老师。。。 晚上搞了一下canny之后的模板匹配…

linux dd 大文件下载,Linux dd+grep 大文件二分查找

Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据&#xff0c;根据指定的格式来转换数据&#xff0c;再输出到文件、设备或标准输出。参数说明(dd --help)Usage: dd [OPERAND]...or: dd OPTIONCopy a file, converting and formatting according to th…

如何让没有安装网页中所需字体的用户也能得到一致的浏览效果【转】

今天给大家谈一个关于字体的话题,我们在做项目的过程中会遇到一些在psd中的字体在自己的电脑中没有安装&#xff0c;或者是一些特殊的文字&#xff0c;通常的做法是把它切成图片&#xff0c;但是如果这个站是多个语言的&#xff0c;那我们是不是把每个语言的都切一张图片呢&…

【视觉项目】【day4】8.24号实验记录(消除瓶子内部“边缘”)

思路分析以及代码 思路1&#xff1a;使用findContours函数&#xff0c;设置轮廓为最外部RETR_EXTERNAL&#xff0c;结果发现结果仍然是所有轮廓。 思路2&#xff1a;先二值化&#xff0c;然后进行闭操作&#xff0c;然后canny&#xff0c;得到的轮廓确实比之前少很多&#xff…

国产操作系统和linux 之间的关系,为何国产系统大多基于开源Linux?操作系统从0做起到底有多难?...

今年貌似是国产操作系统的“爆发”之年&#xff0c;除了老牌的银河麒麟、中标麒麟、深度之外&#xff0c;中兴近日发布了自己的“新支点”&#xff0c;华为也公开了自研的操作系统“鸿蒙”。纵观这些国产操作系统&#xff0c;大多基于开源的Linux。那么为什么我们不可以从0开始…

js 第四课

正则表达式&#xff1a;RegExp对象 正则表达式描述一个字符模式的对象&#xff0c;或者说用某种模式去匹配一类字符串的一个公式。 1.创建 可以用RegExp构造函数和直接量两种方式。正则表达式直接量被包含在一对"/"中. 1 var partern1 RegExp(\\d*); 2 …

解析法实现一元线性回归、多元线性回归以及数据模型可视化操作

目录【1】解析法实现一元线性回归python列表实现利用Numpy实现利用TensorFlow实现数据和模型可视化【2】解析法实现多元线性回归利用Numpy实现需要用到的NumPy数组运算函数数据和模型可视化绘制空间点集&#xff1a;绘制空间平面图&#xff1a;绘制线框图并且与散点图对比&…

32位系统win2008+mssql2008 6G内存折腾纪实

十年没搞硬件了&#xff0c;现在计算机发展到大硬盘大内存的时代了。一直都少搞服务器配置、运营&#xff0c;以前弄服务器都是普通的PC来当服务器。公司原来的一个业务系统用的是mssql2000好几年了&#xff0c;由于业务数据越积压越多最大的一张表已经有7000多万条记录了&…

前台用js、jquery出现错误很多是由于IE缓存

例如&#xff1a;当你用jquery进行异步请求数据时&#xff0c;如果浏览器发现请求的地址不变&#xff0c;或者参数也不改变的情况下 IE默认是取原来的缓存中的数据&#xff0c;而不进行重新请求数 解决的方法是是在地址栏的后面加上一个随机参数值&#xff0c;IE发现地址改变&a…

WebC.BBS 项目参与新人必读

开发环境: 采用Visual Studio 2010&#xff0c;MVC版本采用Asp.Net MVC3&#xff0c;数据库采用Sql2005 2008,扩展技术包括jQuery。 SVN的相关信息&#xff1a; SVN-Url&#xff1a;svn://svn.cyqdata.com/project_bbs 账户申请&#xff1a;请将自己的密码发给组长&#xff0c;…

利用梯度下降法求解一元线性回归和多元线性回归

文章目录原理以及公式【1】一元线性回归问题【2】多元线性回归问题【3】学习率【4】流程分析&#xff08;一元线性回归&#xff09;【5】流程分析&#xff08;多元线性回归&#xff09;归一化原理以及每种归一化适用的场合一元线性回归代码以及可视化结果多元线性回归代码以及可…

Javascript之创建对象(原型模式)

我们创建的每个函数都有一个prototype(原型)属性&#xff0c;这个属性是一个指针&#xff0c;指向一个对象&#xff0c;它的用途是包含可以有特定类型的所有实例共享的属性和方法。 prototype就是通过构造函数而创建的那个对象的原型对象。使用原型的好处就是可以让所有对象实例…

两种方法将Android NDK samples中hello-neon改成C++

一、第一种方法&#xff1a;1.修改helloneon.c 中代码 a.将 char* str; 改为 char str[512] {0}; b.将 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改为 sprintf(str, "FIR Filter benchmark:\nC ve…