2014年1月4日土曜日

Tools : scale down image file

OpenCV を使って、画像ファイルを縮小するツール

単純に、長辺の画素サイズをして指定して縮小します。

縦横は、関係なくて、長辺ね。

一括処理するときに使ってまーしゅ。

何気に、便利よ

makefileもドーンしておきます。

Windowsでも、Linux環境でもそのまま動くはず。

Windows環境は、この前の前の投稿のMinGWと、MSYSでの環境を作ります。

resizeImg 元イメージファイル    縮小ファイル名     縮小後の長辺の画素数

あとは、ソース見てね。

Peace!!


//---------------------------------------------------------
// Function  : resize image data
// File Name : resizeImg.cpp
// Library   : OpenCV2
// Author    :
// Date      :
//---------------------------------------------------------

//----------------------------------------------------------
// Includes
//----------------------------------------------------------

#include <stdio.h>
#include "cv.h"
#include "cxcore.h"
#include "cvaux.h"
#include "highgui.h"

//----------------------------------------------------------
// Defines
//----------------------------------------------------------
#define _POSIX_SOURCE  1   /* POSIX comliant source (POSIX)*/
#define BUFFSIZE       256
#define FALSE          0
#define TRUE           1

//----------------------------------------------------------
// Globals
//----------------------------------------------------------

//----------------------------------------------------------
// Prototype
//----------------------------------------------------------

//----------------------------------------------------------
IplImage *srcImg = 0;
IplImage *dstImg = 0;

//**********************************************************
// Function :
// Category : OpenCV + OpenNI2
// Parameter:
//          :
// ---------------------------------------------------------
// return   : normal end :0
//          : error      : -1  error progess is upper routine.
// note     :
//          :
//***********************************************************
int main( int argc, char** argv ){

int iRez, iRezX, iRezY;
float fRatio;
char* filename;

//******************************************************
// Initialize
//******************************************************

if (argc != 4) {
printf("resizeImage1 inFile outFile maxResolution.\n");
return -1;
}

filename = argv[1];
iRez = atoi(argv[3]);

//******************************************************
// Process
//******************************************************
//------------------------------------------------------
// (1) set resize parameter
//------------------------------------------------------
    // Set original iamge
    if( (srcImg = cvLoadImage( filename, 1)) == 0 ) {
        return -1;
    }

printf("size width=%d,  heigh=%d\n", srcImg->width, srcImg->height);
if (srcImg->width > srcImg->height) {
fRatio = (float)iRez / (float)srcImg->width;
iRezX  = iRez;
iRezY  = (int)((float)srcImg->height * fRatio);
} else {
fRatio = (float)iRez / (float)srcImg->height;
iRezX  = (int)((float)srcImg->width * fRatio);
iRezY  = iRez;
}

//------------------------------------------------------
// (2) execute resizing
//------------------------------------------------------
// create save image buffer
    dstImg = cvCreateImage( cvSize(iRezX, iRezY), IPL_DEPTH_8U, 3);

// resize
cvResize(srcImg, dstImg, CV_INTER_CUBIC);

//------------------------------------------------------
// (3) Display
//------------------------------------------------------

    // display window
    //cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);
    //cvNamedWindow("Resize", CV_WINDOW_AUTOSIZE);

    // display
    //cvShowImage("Image", srcImg);
    //cvShowImage("Resize", dstImg);

    // enter key
    //cvWaitKey(0);
 
    //Save
    cvSaveImage(argv[2], dstImg);

//******************************************************
// Terminate
//******************************************************
    cvReleaseImage(&srcImg);
    cvReleaseImage(&dstImg);

cvDestroyAllWindows();

    return 0;
}


-----------------------------------------------------------------------


TARGET = resizeImg1
CC = g++
OBJS = $(TARGET).o
CFLAGS = -Wall -O2
LDFLAGS = -lm
OPENCVINC = `pkg-config --cflags opencv` -I/usr/include
OPENCVLIB = `pkg-config --libs opencv`

all: $(TARGET)

$(TARGET): $(OBJS)
$(CC) -o $@ $(OBJS) $(LDFLAGS) $(OPENCVLIB)

.cpp.o:
$(CC) -c $< -o $@ $(CFLAGS) $(OPENCVINC)

.c.o:
$(CC) -c $< -o $@ $(CFLAGS) $(OPENCVINC)

clean:
rm -f $(TARGET) $(OBJS)

0 件のコメント:

コメントを投稿