利用OPENCV写的对文件夹下所有图片大小归一化的小工具
2011-07-18 13:58
399 查看
/****************************************************************************************************************************************
//遍历文件夹下所有图片文件,并水平翻转复制,和大小归一化.
//lian 2011-7-13
*******************************************************************************************************************************************/
#include <afxwin.h>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
const int NORM_WIDTH = 48; //归一化后的宽和高
const int NORM_HEIGHT = 48;
const char imgSrcPath[] = "d:\\训练图片库\\"; //原始图片路径
const string imgSavePath = "d:\\训练图片大小归一化库2\\"; //图片最后保存路径
void Recurse(const char* pstr)
//遍历文件夹下的某类型文件图片
{
namedWindow("srcIMG",1);
namedWindow("dstIMG",1);
Mat img;
CFileFind finder;
// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.png");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
int i=0;
//输出查找文件夹下的所有文件名
while (bWorking)
{
bWorking = finder.FindNextFile();
// skip . and .. files; otherwise, we'd recur infinitely!
if (finder.IsDots())
continue;
CString sFileName = finder.GetFileName();
//CString 转化为string
char s[30]= {0};
char* chr= (char*)(LPTSTR) LPCTSTR (sFileName);
for (int i=0;i<sFileName.GetLength();i++)//将两个字符转换为一个字符
{
sprintf(&s[i],"%c",*(chr++));
chr++;
}
string strFileName(s); //转化为string的文件名
string strPathFileName = imgSrcPath+strFileName; //路径文件全名
img=imread(strPathFileName,1); //读取文件
Mat dstImg,srcNormImg,dstNormImg;
flip(img,dstImg,1);//水平翻转图像
resize(img,srcNormImg,Size(NORM_WIDTH,NORM_HEIGHT),0,0,INTER_CUBIC); //大小归一化
resize(dstImg,dstNormImg,Size(NORM_WIDTH,NORM_HEIGHT),0,0,INTER_CUBIC);
string strFileName2(strFileName); //翻转图像的文件名
int pos = strFileName2.find('.');
strFileName2 = strFileName2.insert(pos,"_1");
cout<<strFileName2<<endl;
imwrite(imgSavePath+strFileName,srcNormImg); //保存归一化后的图片
imwrite(imgSavePath+strFileName2,dstNormImg); //保存翻转归一化后的图片
imshow("srcIMG",srcNormImg);
imshow("dstIMG",dstNormImg);
char c = waitKey(0);
}
finder.Close();
}//Recurse
int main()
{
if (!AfxWinInit(GetModuleHandle(NULL), NULL, GetCommandLine(), 0))//初始化MFC
cout << "panic!" << endl;
else
Recurse( imgSrcPath); //此处也需要调整路径
return 0;
}
//遍历文件夹下所有图片文件,并水平翻转复制,和大小归一化.
//lian 2011-7-13
*******************************************************************************************************************************************/
#include <afxwin.h>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
const int NORM_WIDTH = 48; //归一化后的宽和高
const int NORM_HEIGHT = 48;
const char imgSrcPath[] = "d:\\训练图片库\\"; //原始图片路径
const string imgSavePath = "d:\\训练图片大小归一化库2\\"; //图片最后保存路径
void Recurse(const char* pstr)
//遍历文件夹下的某类型文件图片
{
namedWindow("srcIMG",1);
namedWindow("dstIMG",1);
Mat img;
CFileFind finder;
// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.png");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
int i=0;
//输出查找文件夹下的所有文件名
while (bWorking)
{
bWorking = finder.FindNextFile();
// skip . and .. files; otherwise, we'd recur infinitely!
if (finder.IsDots())
continue;
CString sFileName = finder.GetFileName();
//CString 转化为string
char s[30]= {0};
char* chr= (char*)(LPTSTR) LPCTSTR (sFileName);
for (int i=0;i<sFileName.GetLength();i++)//将两个字符转换为一个字符
{
sprintf(&s[i],"%c",*(chr++));
chr++;
}
string strFileName(s); //转化为string的文件名
string strPathFileName = imgSrcPath+strFileName; //路径文件全名
img=imread(strPathFileName,1); //读取文件
Mat dstImg,srcNormImg,dstNormImg;
flip(img,dstImg,1);//水平翻转图像
resize(img,srcNormImg,Size(NORM_WIDTH,NORM_HEIGHT),0,0,INTER_CUBIC); //大小归一化
resize(dstImg,dstNormImg,Size(NORM_WIDTH,NORM_HEIGHT),0,0,INTER_CUBIC);
string strFileName2(strFileName); //翻转图像的文件名
int pos = strFileName2.find('.');
strFileName2 = strFileName2.insert(pos,"_1");
cout<<strFileName2<<endl;
imwrite(imgSavePath+strFileName,srcNormImg); //保存归一化后的图片
imwrite(imgSavePath+strFileName2,dstNormImg); //保存翻转归一化后的图片
imshow("srcIMG",srcNormImg);
imshow("dstIMG",dstNormImg);
char c = waitKey(0);
}
finder.Close();
}//Recurse
int main()
{
if (!AfxWinInit(GetModuleHandle(NULL), NULL, GetCommandLine(), 0))//初始化MFC
cout << "panic!" << endl;
else
Recurse( imgSrcPath); //此处也需要调整路径
return 0;
}
相关文章推荐
- 利用OPENCV写的对文件夹下所有图片大小归一化的小工具
- 利用opencv的cvResize对文件夹里所有图片缩放到统一大小
- 利用opencv的cvResize对文件夹里所有图片缩放到统一大小
- 利用keras中image.ImageDataGenerator.flow_from_directory()实现从文件夹中提取图片和进行简单归一化处理
- 利用多线程统计文件夹内所有文件的大小
- 使用OpenCV对文件夹下所有图片进行批量处理
- OpenCV学习之例程详解(03):搜索文件夹下所有指定类型图片并逐张显示
- opencv鼠标画矩形截取保存图片一部分并归一化为原图大小(Patches selected for feature extraction)
- ubuntu下利用python对文件夹下图片进行大小调整
- opencv读取一个文件夹里的所有图片
- OpenCV实现resize和crop当前文件夹下所有图片
- window批处理删除文件夹下所有大小为1651字节的jpg图片
- OpenCV/C/C++读取文件夹内所有图或者多张图片
- Py之Crawler:爬虫利用随机选取代理访问服务器的方法实现下载某网址上所有的图片到指定文件夹——Jason niu
- opencv读取某文件夹下图片并进行归一化
- opencv批量读取图片并剪裁成固定大小存入本地文件夹
- OpenCV实现任意大小图片的合并
- OpenCv学习之:利用vs2008的IDE工具对IplImage、Mat、CvMat结构进行解析解析
- openCV学习笔记(5):使用sprintf函数实现在窗口连续显示同一文件夹下的图片
- 查看磁盘文件夹大小工具WinDirStat