我门要对某个文件夹下全部图像文件进行统一处理,假设图像的数量过多。那么手动地一张张处理就会显得有些麻烦。本文使用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合作对某个文件夹下全部图像进行相似处理的更多相关文章

  1. matlab从文件夹名中获得该文件夹下所图像文件名

    function [s,nameC]=get_FileNameFromFolderPath(path) % 函数调用:[s,nameC]=get_FileNameFromFolderPath(path ...

  2. 写个批处理脚本来帮忙干活--遍历文件夹&字符串处理

    这次打算写几篇关于脚本方面的博客,主要是记录一下 Gradle 脚本和批处理脚本的一些写法,方便后续查阅. 前言 平常开发过程中,一些较为重复的手工性工作,如果能让脚本来帮忙处理,自然是最好的,刚好之 ...

  3. Python如何读取指定文件夹下的所有图像

    (1)数据准备 数据集介绍: 数据集中存放的是1223幅图像,其中756个负样本(图像名称为0.1~0.756),458个正样本(图像名称为1.1~1.458),其中:"."前的标 ...

  4. matlab操作之--读取指定文件夹下的“指定格式”文件

    %% 正负样本所在folder fext='*.png';%要读取的文件格式 positiveFolder='F:\课题\Crater detection\machingLearning\Positi ...

  5. FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有

    2018-11-05  19:42:08开始写 选择 删除 1.FileUtils.java类 import java.io.File;//导入包 import java.util.List;//导入 ...

  6. opencv实现遍历文件夹下所有文件

    前言 最近需要将视频数据集中的每个视频进行分割,分割成等长的视频片段,前提是需要首先遍历数据集文件夹中的所有视频. 实现 1.了解opencv中的Directory类: 2.实现测试代码: 系统环境 ...

  7. Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本

    Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本 在 mac 或者 linux 系统中,我们的浏览器或者其他下载软件下载的文件全部都下载再 ~/Downloads/ 文 ...

  8. 基于OpenCV依次读取文件夹下的所有图像文件

    //编程环境:VS2008+OpenCV1.1, //本程序首先挨个读取F://my face database//OnlyFace文件夹下的所有图 像 文件,之后,在项目文件夹下 //建立一 个名为 ...

  9. Python调用OpenCV读显写

    OpenCV提供了python的接口,而且很重要的一点是python下的很多接口名与C++的接口名是一样的,这一篇先记录python调用OpenCV去读取图像.显示图像和保存图像. 1.OpenCV读 ...

随机推荐

  1. Windows 8.1设置WIFI共享以及无法启动承载链接解决方案.

    1.设置WIFI共享方法 2.无法启动承载链接解决方案 1.设置WIFI共享方法 Windows8 windows8.1笔记本wifi热点 wifi共享.快速将笔记本或者台式机的网络共享给手机,平板等 ...

  2. myslq 5.7 root 默认密码

    sudo sumysqld_safe --skip-grant-tables --skip-networking & UPDATE mysql.user SET password=PASSWO ...

  3. FlowNet: Learning Optical Flow with Convolutional Networks

    作者:嫩芽33出处:http://www.cnblogs.com/nenya33/p/7122701.html 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者同意,必须保留此段声明:必须 ...

  4. PHP会话控制考察点

    为什么要使用会话控制技术 HTTP协议是无状态的,也就是说HTTP没有一个内建的机制来维护两个事务之间的状态.当一个用户完成一个请求发起第二个请求的时候,服务器无法知道这次请求是来自于上一次的客户.而 ...

  5. patest_1003_Emergency (25)_(dijkstra+dfs)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  6. 循环冗余校验(CRC)算法入门

    http://blog.csdn.net/liyuanbhu/article/details/7882789 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式.在嵌入式软件开发中,经常要 ...

  7. 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...

  8. 除了上万的月薪之外,还有什么理由让我们必须学Python?

    虽然目前的编程语言有很多,但是基础语法上的概念,本质上都是相通的.可以做到一通百通.所以没有必要为了学哪门语言纠结太多. python是目前市面上,我个人认为是最简洁&&最优雅& ...

  9. 第4节 hive调优:1、2、fetch抓取和表的优化

    hive的调优:第一个调优:fetch抓取,能够避免使用mr的,就尽量不要用mr,因为mr太慢了 set hive.fetch.task.conversion=more 表示我们的全局查找,字段查找, ...

  10. 第3节 mapreduce高级:12、mapreduce相关的参数调整

    5.1 多job串联 一个稍复杂点的处理逻辑往往需要多个mapreduce程序串联处理,多job的串联可以借助mapreduce框架的JobControl实现 示例代码: ControlledJob ...