openCV实现图像归一化

廉价感情. 提交于 2019-11-26 06:44:56

        今天下午师弟问了一个关于图像归一化的问题,因此小编写了关于图像归一化的代码,比如一个文件夹下有多幅图像,每幅图像的大小不一致,如果想把这些图像归一化为相同大小的图像,就涉及到归一化的问题,现分享代码如下:

#include <opencv2/opencv.hpp>
#include "highgui.h"
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
    IplImage *src;
    src = cvLoadImage("100000.jpg");
    cvShowImage("100000",src);
    //cvReleaseImage(&src);
    IplImage* gray_image;  
    gray_image = cvCreateImage(cvGetSize(src),8,1);    
    cvCvtColor(src,gray_image,CV_BGR2GRAY); 
    //cvShowImage("GrayImage",gray_image);
    IplImage* norm_image;  
    CvSize norm_cvsize;  
    norm_cvsize.width = 480;  //目标图像的宽    
    norm_cvsize.height = 640; //目标图像的高  
    cout<<"开始归一化"<<endl;
    norm_image = cvCreateImage(norm_cvsize, gray_image->depth,gray_image->nChannels);//构造目标图象  
    cvResize(gray_image, norm_image, CV_INTER_LINEAR); //缩放源图像到目标图像 
    cout<<"归一化完成"<<endl;
    cvShowImage("归一化图像",norm_image);
    cvWaitKey(0);
    cvSaveImage("norm.jpg", norm_image); //保存归一化图像到本地文件夹下
    cvReleaseImage(&norm_image);
}

上面的代码实现了将一幅768*1024的图像转化为480*640的图像,并将处理后的图像保存在文件夹下,如果想将多幅图像大小不一致的图像归一化为相同大小的图像,只需要加一个for循环,在此小编只实现了一幅图像的处理。下面给出原图像和和代码运行后得到的处理后的图像:

至此,实现了一幅图像大小的更改。如果将一个文件夹下的多幅图像进行归一化为相同大小的图像,只需要在上面的代码中加上一个for循环即可,代码如下:

#include <opencv2/opencv.hpp>
#include "highgui.h"
#include <iostream>
#include<fstream>
using namespace std;
using namespace cv;
int nImages=1491;
void main()
{
	//加载图像名到数组中
	char **img_name_index = new char *[nImages]; // load image names of Ukbench
	ifstream inf_img ("..\\data\\img_name.txt", ios_base::in);
	if(!inf_img) return;
	for (int n = 0; n < nImages; n++)
	{
	    img_name_index[n] = new char[100];
	    if (!img_name_index[n]) break;
	    inf_img.getline(img_name_index[n], 32);
	}
	inf_img.close();
	for(int i=0;i<nImages;i++)
	{
	    cout<<i+1<<endl;
	    char temp[100]="\0";
	    char result_img[100]="\0";
	    sprintf(temp,"..\\images\\%s",img_name_index[i]);
	    IplImage *src;
            src = cvLoadImage(temp);
    
	    IplImage* gray_image;  
            gray_image = cvCreateImage(cvGetSize(src),8,1);    
            cvCvtColor(src,gray_image,CV_BGR2GRAY); 
	  
	    IplImage* norm_image;  
            CvSize norm_cvsize;  
            norm_cvsize.width = 480;  //目标图像的宽    
            norm_cvsize.height = 640; //目标图像的高  

            norm_image = cvCreateImage(norm_cvsize, gray_image->depth,gray_image->nChannels); //构造目标图象  
            cvResize(gray_image, norm_image, CV_INTER_LINEAR); //缩放源图像到目标图像 
	    sprintf(result_img,"..\\new_image\\%d.jpg",i+1);
	    cvSaveImage(result_img, norm_image);//cvSaveImage("norm.jpg", norm_image); //保存归一化图像到本地文件夹下
            cvReleaseImage(&norm_image);
	    cvReleaseImage(&src);
	    cvReleaseImage(&gray_image);
	}
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!