スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

リサイズする【OpenCV】【G++】【C++】【DTI】

表題通り、OpenCVでお気軽にリサイズしてファイル吐き出すめも。
ある所から640*480のBMPかJPGしか受け付けないよwwwwwww ということだったので、それにあわしてあげる。
・・・くっそ。


リサイズ方法は非常にお気軽。
今考えれば、特徴量もお気軽だったのでOpenCVすごいね!

参考サイトはこのサイト


1.事前準備
環境はまったく同じため何回か前の記事参照(OpenCVでSURF特徴量計算な記事)
いつもどおり格安DTIのVPSにて実行してます。


2.内容

①ファイル読み込み

IplImage *img=0, *dst = 0;
char* filename = argv[1];
if( (img = cvLoadImage( filename, 1)) == 0 ){
//ミス時
}


②リサイズ
2行で実装完了する。すてき!
dstにリサイズした画像がはいってる感じです。先に領域確保しなきゃあかんので、640*480のものを作ってます。


dst = cvCreateImage( cvSize(640,480),IPL_DEPTH_8U, 3);
cvResize(img, dst, CV_INTER_CUBIC);



③吐き出す
リサイズしたのを保存すればいいだけ、簡単。
ちなみにnew_file_pathはstd::stringなので。

int saveResult = cvSaveImage( new_file_path.c_str(), dst);


3.出来たヤツの抜粋
includeしてるやつには不要なものが入ってるかもしれない。
外部仕様
 リクエスト:
  argv[1] ・・・ リサイズ対象の画像のローカルパス(/var/www/html/aaaa/hogegege.jpgみたいな)
 argv[2] ・・・ リサイズ後のファイルをおくローカルフォルダ(/home/bokubokuみたいな)

 レスポンス:
  ・省略!

---

#include < stdio.h>
#include < string.h>
#include < fstream>
#include < iostream>
#include < sstream>
#include < sys/stat.h>
#include < opencv2/highgui/highgui.hpp>
#include < opencv2/nonfree/nonfree.hpp>
#include < opencv2/legacy/legacy.hpp>

using namespace std;
IplImage *img=0, *dst = 0;


int main(int argc, char *argv[]){

//locd image
char* filename = argv[1];
if( (img = cvLoadImage( filename, 1)) == 0 ){
return -1;

}

//640*480
dst = cvCreateImage( cvSize(640,480),IPL_DEPTH_8U, 3);

//リサイズ
cvResize(img, dst, CV_INTER_CUBIC);

srand((unsigned)time(NULL));
char random[25];
char material[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int currentrandom;
for(currentrandom = 0; currentrandom<26; currentrandom++){
random[currentrandom] = material[rand()%(sizeof(material)-1)];
}
random[currentrandom] = '\0';

//new folder path
std::string new_file_path(argv[2]);
new_file_path += "/";
new_file_path += random;
new_file_path += ".bmp";

//
int saveResult = cvSaveImage( new_file_path.c_str(), dst);

// 解放
cvReleaseImage(&img);
cvReleaseImage(&dst);

return 0;

}

---


4.しめ
あとはこいつをどう使うか、どう呼び出すか、どう値を返すか などなどを考えればいい。
速きこと、島風の如し、です!


C++である理由
・僕はJavaが嫌い。(仕事で使ってる言語:Java。フレームワーク:SAStruts)
・回線早くなってる時代にローカルで処理させる必要ない。
・解析とか改修したときにローカルで処理させる構成だとみんなアップデートしてくれないかもしれない。
・サーバー負荷はなんとかなる(オートスケールなど)
・単純に実行結果をサーバー側であつめたい(どういう画像が多いかなど解析できる)



追伸、最近タイトルにDTIってつければDTIのTwitterアカウントがRTしてくれるんじゃないかなって思ってます。
スポンサーサイト
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。