使用OpenCV读、操作、写图像并与bash合作对某个文件夹下全部图像进行相似处理
我门要对某个文件夹下全部图像文件进行统一处理,假设图像的数量过多。那么手动地一张张处理就会显得有些麻烦。本文使用OpenCV和bash来完毕我们指定的任务。
任务
将文件夹A下的全部统一格式的jpg图像变成统一尺寸的图像,输出到文件夹B中。A文件夹下图像的宽度和高度须要去掉最后一列、最后一行,而且使得输出图像的高度小于宽度。
技术
OpenCV读取图像;訪问图像中的元素。OpenCV写图像到磁盘。
BASH扫描每一个输入图像;确定输出图像名称。
OpenCV对图像进行处理
源码例如以下:
#include <cassert>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include "cv.hpp"
#include "opencv2/opencv.hpp"
//#include "opencv2/core.hpp"
#include "opencv2/highgui/highgui_c.h" using namespace std;
using namespace cv; int main(int argc, char **argv)
{
if (3 != argc){
cerr << "input error\n";
cerr << "Usage : " << argv[0] << " <input image> <output directory>" << endl;
return -1;
}
// reading the input image
Mat oim = imread(argv[1]);
if (oim.empty())
return -1; const int rows = oim.rows;
const int cols = oim.cols;
Mat fim(rows-1, cols-1, CV_8UC3); for (int r = 0; r < (rows-1); r++){
for (int c = 0; c < (cols-1); c++){
fim.at<Vec3b>(r,c) = oim.at<Vec3b>(r,c);
}}
// rotate 90'
Mat lim;
if (rows > cols){
lim.create(cols-1, rows-1, CV_8UC3);
for (int r = 0; r < (cols-1); r++){
for (int c = 0; c < (rows-1); c++){
lim.at<Vec3b>(r,c) = fim.at<Vec3b>(c,cols-2-r);
}}
}
else{
lim = fim;
}
// saving
string filename(argv[1]);
int dirpos = filename.find_last_of('/');
if (string::npos == dirpos){
dirpos = 0;
}
else{
dirpos += 1;
}
string wfn = &filename[dirpos];
string outdir = string(argv[2]);
string outfile = outdir+string("/")+wfn; vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
compression_params.push_back(100);
imwrite(outfile, lim, compression_params);
if(lim.cols != 480 || lim.rows != 320)
cerr << "size error" << endl; return 0;
}
程序分三大步骤完毕:读如程序选项中的输入图像;对输入图像去除最后一行和最后一列。推断高度和宽度的要求(是否进行反转90度)。将图像写入磁盘。
写入磁盘时。使用了jpeg压缩方式,压缩的參数设置为100,表示无失真压缩。
输入图像的名称和输出图像的名称使用同一个。
bash处理
用bash对某个文件夹下的全部图像都处理一次,而且输出到指定的文件夹。源码例如以下:
SPS="input/"
DFS=`ls -A ${SPS}*.jpg`
JPGDIR="../output/jpg"
mkdir -p ${JPGDIR}
for fn in $DFS
do
echo $fn
./rmRowACols.exe $fn $JPGDIR
done
总结
BASH+C/C++ 合作来完毕一个完整的任务,各取所长,兼顾性能和开发难度,眼下被我觉得是比較简单的方式。
这样作另一个优点:C\C++语言能够做很多其它细节,别调用别人的程序要任意一点。
使用OpenCV读、操作、写图像并与bash合作对某个文件夹下全部图像进行相似处理的更多相关文章
- matlab从文件夹名中获得该文件夹下所图像文件名
function [s,nameC]=get_FileNameFromFolderPath(path) % 函数调用:[s,nameC]=get_FileNameFromFolderPath(path ...
- 写个批处理脚本来帮忙干活--遍历文件夹&字符串处理
这次打算写几篇关于脚本方面的博客,主要是记录一下 Gradle 脚本和批处理脚本的一些写法,方便后续查阅. 前言 平常开发过程中,一些较为重复的手工性工作,如果能让脚本来帮忙处理,自然是最好的,刚好之 ...
- Python如何读取指定文件夹下的所有图像
(1)数据准备 数据集介绍: 数据集中存放的是1223幅图像,其中756个负样本(图像名称为0.1~0.756),458个正样本(图像名称为1.1~1.458),其中:"."前的标 ...
- matlab操作之--读取指定文件夹下的“指定格式”文件
%% 正负样本所在folder fext='*.png';%要读取的文件格式 positiveFolder='F:\课题\Crater detection\machingLearning\Positi ...
- FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有
2018-11-05 19:42:08开始写 选择 删除 1.FileUtils.java类 import java.io.File;//导入包 import java.util.List;//导入 ...
- opencv实现遍历文件夹下所有文件
前言 最近需要将视频数据集中的每个视频进行分割,分割成等长的视频片段,前提是需要首先遍历数据集文件夹中的所有视频. 实现 1.了解opencv中的Directory类: 2.实现测试代码: 系统环境 ...
- Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本
Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本 在 mac 或者 linux 系统中,我们的浏览器或者其他下载软件下载的文件全部都下载再 ~/Downloads/ 文 ...
- 基于OpenCV依次读取文件夹下的所有图像文件
//编程环境:VS2008+OpenCV1.1, //本程序首先挨个读取F://my face database//OnlyFace文件夹下的所有图 像 文件,之后,在项目文件夹下 //建立一 个名为 ...
- Python调用OpenCV读显写
OpenCV提供了python的接口,而且很重要的一点是python下的很多接口名与C++的接口名是一样的,这一篇先记录python调用OpenCV去读取图像.显示图像和保存图像. 1.OpenCV读 ...
随机推荐
- 不能局部安装webpack的解决方法
npm ERR! code ENOSELFnpm ERR! Refusing to install package with name "webpack" under a pack ...
- CAD参数绘制圆弧(com接口)
在CAD设计时,需要绘制圆弧,用户可以在图面点圆弧起点,圆弧上的一点和圆弧的终点,这样就绘制出圆弧. 主要用到函数说明: _DMxDrawX::DrawArc2 由圆弧上的三点绘制一个圆弧.详细说明如 ...
- zabbix4.2学习笔记--用自带的mysql监控模块
这里演示监控zabbix本身用到的mysql 第一步:建立mysql监控用户 在生产环境中,出于安全考虑,建议监控客户端数据库时,单独配置一个查询权限用户做查询操作即可 # 撤掉安装时给予的分配单个数 ...
- Mybatis输入输出映射_动态sql_关联关系(一对一、一对多、多对多)
Mybatis输入输出映射_动态sql_关联关系(一对一.一对多.多对多)输入输出映射parameterType完成输入映射parameterType可以传入的参数有,基本数据类型(根据id查询用户的 ...
- jdk11 eclipse下开启ZGC
平台支持 ZGC目前只在Linux/x64上可用,如果有足够的需求,将来可能会增加对其他平台的支持. 对的,目前只支持64位的linux系统. -_-' eclipse.ini配置: -XX:+Unl ...
- python 求100以内所有素数
def prime(num): for i in range(2, num): if num % i == 0: # 能被1之外的任意个数整除的即为非素数,返回False,将被filter函数过滤掉 ...
- python beautifulsoup获取特定html源码
beautifulsoup 获取特定html源码(无需登录页面) import refrom bs4 import BeautifulSoupimport urllib2 url = 'http:// ...
- 尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框
尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框 近期正在逐步摸索学习React的用法,尝试着写几个通用型的组件,整体项目还是根据webpack+react+css-me ...
- js 实现弹力球效果
1.html代码: <div id='imgid'> <img src="img/5.png"> </div> 2.js代码: imgobj=d ...
- org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException 前言中不允许有内容 来自类路径资源的XML文档中的第1行是无效的
今天复习一下Spring和Hibernate的整合,遇到了一个问题,报错信息如下: org.springframework.beans.factory.xml.XmlBeanDefinitionSto ...