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 件のコメント:
コメントを投稿