您的位置:首页 > 其它

【深度学习】针对ImageNet---AlexNet所写的图像预处理程序(3264*2448)

2016-11-09 17:39 561 查看
/*******************************************************************************************************************
*文件功能:
*     1--针对AlexNet模型,进行的图片处理程序,将图片处理成256*256的大小
*     2--用于更改图片的图片名,后缀图片格式,图片的大小
*     3--图片原来的规格有两种:
*                             1---2448*3264
*                             2---3264*2448
*处理过程:
*     2448*3264------2048*2048(setROI)------>1024*1024(cvPyrDown)--->512*512----->256*256
开发环境:
*      win10+vs2013+OpenCv2.4.8
*时间地点:
*      陕西师范大学 2016.11.9
********************************************************************************************************************/

#include<stdio.h>
#include<iostream>

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

#include<opencv2/core/core_c.h>
#include<opencv2/imgproc/imgproc_c.h>

using namespace std;
using namespace cv;

int main()
{
char strFilename[100];                           //【1】定义一个字符数组保存----图片的存储路径
char strWindowname[100];                         //【2】定义一个字符数组保存----用于动态更新窗口的窗口名
char strFilenameAft[100];                        //【3】定义一个字符数组保存----用于给处理之后的图片动态的命名
char strFilenameLast[100];
int  j = 1;
for (int i = 1; i <= 211; i++)
{                                                //【4】将图片的路径名动态的写入到strFilename这个地址的内存空间
sprintf_s(strFilename,    "F:\\crack_classify_img\\crack_3_45_256\\1 (%d).jpg", i);
sprintf_s(strFilenameAft, "F:\\crack_classify_img\\aft_crack_3_45_256\\noc%d.jpeg", j);
sprintf_s(strWindowname, "srcImg%d", j);
//===========================================================================================
//【模块1】将图片读入内存,并显示
//===========================================================================================
IplImage* pImg = cvLoadImage(strFilename);          //【1】从指定的路径,将图片加载到内存中
//cvNamedWindow(strWindowname, CV_WINDOW_AUTOSIZE); //【2】创建一个显示图片的窗口
//cvMoveWindow (strWindowname,0,0);                 //【3】将显示窗口固定在(200,200)这个位置显示都进来的图片
//cvShowImage  (strWindowname, pImg);               //【4】显示图片
//cvWaitKey(0);
//============================================================================================
//【模块2】设置ROI区域裁剪图片----利用ROI区域将图片裁剪为:2048*2048
//============================================================================================
if ((pImg->width == 2448) && (pImg->height == 3264))
{
cvSetImageROI(pImg, cvRect(200, 608, 2048, 2048));//【1】设置一个2048*2048的ROI区域
}
else
{
cvSetImageROI(pImg, cvRect(608, 200, 2048, 2048));//【1】设置一个2048*2048的ROI区域
}
cvSaveImage(strFilenameAft,pImg);
IplImage* pImgCopy = cvLoadImage(strFilenameAft);
//===========================================================================================
//【模块3】高斯金字塔下采样
//         1----将图片size调节到256*256,并显示
//         2----2048*2048:经过连续三次下采样,变为256*256
//============================================================================================
IplImage* pPyrDownImg = cvCreateImage (cvSize(pImgCopy->width / 2, pImgCopy->height / 2), pImgCopy->depth, pImgCopy->nChannels);
IplImage* pPyrDownImg1 = cvCreateImage(cvSize(pPyrDownImg->width / 2, pPyrDownImg->height / 2), pPyrDownImg->depth, pPyrDownImg->nChannels);
IplImage* pPyrDownImg2 = cvCreateImage(cvSize(pPyrDownImg1->width/ 2, pPyrDownImg1->height/ 2), pPyrDownImg1->depth, pPyrDownImg1->nChannels);

cvPyrDown(pImg,         pPyrDownImg,  CV_GAUSSIAN_5x5);//【1】2048*2048--->1024*1024
cvPyrDown(pPyrDownImg,  pPyrDownImg1, CV_GAUSSIAN_5x5);//【2】1024*1024--->512*512
cvPyrDown(pPyrDownImg1, pPyrDownImg2, CV_GAUSSIAN_5x5);//【3】512*512----->256*256

//cvNamedWindow("【PyrDown】", CV_WINDOW_AUTOSIZE);
//cvMoveWindow ("【PyrDown】", 0, 0);
//cvShowImage  ("【PyrDown】", pPyrDownImg2);
cvSaveImage(strFilenameAft, pPyrDownImg2);            //【2】将修改图片size之后的图片保存在指定的文件夹下
++j;
cv::waitKey(1);
//============================================================================================
//【模块4】释放内存空间
//============================================================================================
cvReleaseImage(&pImg);                                 //【1】释放掉存储图片的内存
cvReleaseImage(&pImgCopy);
cvReleaseImage(&pPyrDownImg);
cvReleaseImage(&pPyrDownImg1);
cvReleaseImage(&pPyrDownImg2);
cvDestroyWindow(strWindowname);                        //【2】销毁窗口的内存
//cvDestroyWindow("【PyrDown】");
}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: