サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
パリ五輪
iphone.moo.jp
ここでは、Xcode4を用いてOpenCVのプログラムを組むために必要な環境の整え方を紹介します。用いるXcodeはXcode4.3、OpenCVのバージョンは2.3です。また、動作はMacOSX 10.7 Lionで確認しています。 Xcodeのインストール まずはじめに、Xcode4.3をApp Storeからダウンロードします。以前はiOS developper centerからダウンロードしていましたが、最近はApp Storeから入手できるようです。 gccのインストール コマンドライン用のgccがインストールされていない場合はXcodeのPreferenceからDownloadsタブへとすすみ、Command Line Toolsをインストールしておいて下さい。コマンドラインで使えるgccがない場合、homebrewでOpenCVをインストールしようとしてもエラーで停止してしま
前回(iPhoneアプリ:電卓をつくる その5)までのプログラムで、かなり電卓っぽくなってきましたが、まだ演算が出来ないのでした。今回は最終回なので演算まで出来るようにして、電卓プログラムを完成させましょう。 最終的なインタフェースはこんな感じです。割り算と掛け算ができひんやんけ!とか、殺風景すぎるわ!とかの非難はごもっともです(笑)インタフェースのお化粧に関しては後ほど説明したいと思います。 まずはIBを使って、前回のボタンに加えて演算子ボタン(+とー)とイコールボタンをつけましょう。そして、プラスとマイナスの各ボタンにTag番号の0と1を振っておきます。ここまでで一旦、InterfaceBuilderの作業は終了です。 次にヘッダファイルをみます。 CalcViewController.h @interface Calc2ViewController : UIViewControlle
これから数回にわたって電卓のiPhoneアプリを作っていきたいと思います。単純に作業手順だけでなく、どうやって設計するのか?まで伝えられたら良いかなと思ってます。もともとはゼミの資料にする予定だったのですが、せっかくなので公開しちゃおうということで(笑) 今回は難しいことは考えずに最小限の機能だけ実装していきましょう。 とりあえずの目標はiPhoneにデフォルトでついているこれ。 といっても、いきなりこれだけのものを作るのは大変だから、もっと手前の段階からスタートして、徐々に電卓へと仕上げていく予定です。ということで、電卓の前身であるカウンタから作っていきましょう。雰囲気はこんな感じ。野鳥の会がもってるやつのディジタル版ですね(笑)インタフェースはこんな感じ。 プラスボタンをタップしたら、数字がカウントアップされるという、なんとも簡単なアプリです。簡単ですが、iPhoneプログラミングに必
前回(iPhoneネットワークプログラミング(非同期通信))にひきつづき、ネットワークプログラミングその3では、Web上からファイルをダウンロードしてきてiPhoneに保存するプログラムを紹介します。 CoCoaフレームワークにはNSURLDownloadというクラスがあり、非常に簡単にファイルをダウンロードできるのですが、iPhoneではこのクラスが実装されていないため、NSURLConnectionクラスを使って自作する必要があります。 といっても、前回のプログラムと大きくは違わないので 簡単に理解できるかと思います。 sampleViewController.h @interface networkViewController : UIViewController { NSFileHandle *file; NSString *filePath; } @end sampleViewC
C言語を勉強した人がOpenCVを始める取っ掛かりとして使ってもらえれば嬉しいです。配列とか関数は分かるけど、ポインタはちょっと・・・というくらいの人から読めるように書いてみました。 OpenCVとは OpenCVとは画像処理で使える関数がたくさん用意されている関数群(フレームワーク)です。例えばC言語でファイルを読み込むのにfgets()という関数が用意されているように、OpenCVでは画像を読み込むcvLoadImage()という関数が用意されています。勿論、用意されている関数はこれだけではなく、画像をグレースケール化したり画像中から四角形を検出したり、顔を検出したりする関数まで用意されています。 OpenCVでの処理の流れ OpenCVを使ったプログラムの基本的な流れは といった流れになっています。以下では、まず始めにstep1とstep3だけを行うプログラムを作成したあとに徐々に複
DFTを使って、ガウシアンフィルタ(Gaussian Filter)を高速化する方法を説明します。基本的なアイデアは、対象画像を一旦フーリエ変換し、フーリエ領域(Fourie domain)でマスク処理を行うことで、計算量を減らそうというものです。 ガウシアンフィルタとは? ガウシアンフィルタでは、対象画素に近い画素に大きな重みをつけ、遠い画素には小さい重みを付けた加重平均を取ることで、自然なぼかしを実現しています。この重みづけを下のガウス関数を用いて行っているのでガウシアンフィルタと呼ばれます。 この式からも分かるようにσの値が小さいとぼかし効果は小さく、σの値が大きくなるとそれに従ってぼかし効果も大きくなります。 ガウシアンフィルタはボックスフィルタに比べて非常にきれいなぼかしが可能です。ボックスフィルタの場合、ぼかしを強くしたとき画質劣化がひどいのに対して、ガウシアンフィルタでは自然
UITabBarを使って、上の図のような吹出しメニューを作る方法を説明します。動作は次のようになります。TabBarItemを選択すると対応するメニューが出現し、もう一度押すと消えます。また、べつのTabBarItemを選択すると、現在のメニューが消えて対応するメニューが出現します。 親画面を作成する まずはプロジェクトを作成します。今回もView-Based Applicationのテンプレートを使用します。プロジェクト名はTestにしました。 プロジェクトが作成できたら親画面を作成するため、TestViewController.xibファイルをダブルクリックしてInterface Builderを起動します。次にViewにライブラリからUITabBarをD&Dし、そのUITabBarにUITabBarItemをD&Dし、タブを3つ作成します。 吹出しメニュー画面を作成する 次に、各メニ
OpenCVには2次元ウェーブレット変換(wavelet transform)のメソッドが実装されていなかったので作ってみた。先日作成した画像修復プログラムのテンプレートマッチングが遅い〜ってぼやいてたところ、@fukushima1981様から、ウェーブレット変換して多重解像度でのマッチをすればいいのでは?とのコメントを頂いたのが始まりです。 ウェーブレット変換の意味などは、こちらの参考書に素晴らしく分かりやすい説明が書いてあるので、参考にしてみてください。うちの研究室でもゼミ資料として使用しています。 すごく簡単に(しかも1次元ウェーブレットで。笑)説明すると下図のような感じ。フーリエ変換の場合、変換結果は周波数ごとのパワー値で出てきます。(フーリエ変換の簡単な説明)それに対して、ウェーブレット変換の場合には、各周波数ごとに、パワー値の時間変化が変換結果として得られる。 要するに、フーリ
OpenCVを使ってQRコードを検出するプログラムを作成したので、その手順をまとめてみた。このプログラムはlibdecodeqrを参考にさせていただきました。(本家のサイトは閉鎖してしまっているようです) 作成したプログラム+ドライバプログラムを置いておきますので参考にしてください。このプログラムを用いて下記にQRコード検出アルゴリズムを紹介していきます。 QRコード検出器プログラム 1. 画像中から正方形の部分を検出する まずは、ファインダパタン(3隅にある目玉画像)を検出するために、画像中から輪郭を抽出し、抽出された輪郭から正方形の輪郭のみを保存します。 具体的には、まずcvFindContoursメソッドを用いて輪郭情報をcont変数に格納します。次に格納された輪郭情報のうち正方形のもののみを検出するため、面積と縦横比をチェックし、そのチェックに通ったもののみcandidates変数
アイデアを出すときには、自分の中にある情報雲とでも言うべき”もやもや”っとしたモノから数カ所をちぎりとり、型を変えて、見方を変えて、姿をかえて、そして本質をつくりだす。その火種となる情報雲を絶やさないように・・・。 ちょっと慣れてきた人の為のハテブの使い方 効率よく人気記事を探すためには、はてなブックマークの人気エントリーや注目エントリーを利用するのが一番便利だと思います。このサイトでは、これらのエントリーだけでなく、一歩踏み込んだ使い方まで解説されているので、はてなブックマークをさらに利用したい方にはオススメです! 今さら聞けない?初心者に送る「Twitter」の始め方・使い方 インスタントでライトなコミュニケーションはもとより、研究や技術といった深〜い情報の交換までできてしまう優れもの。ただ、RTや@や#など、使われる用語が特殊なため、少し敷居が高いと感じてしまう人も多いはず。そこで、
(1) 画像をUIImageに読み込む 指定したファイルから画像を読み込み、UIImageに格納するためにはUIImageのクラスメソッドであるimageNameメソッドを使います。このメソッドはinitWithContentsOfFileよりも高速です。 //画像を読み込む UIImage *image = [UIImage imageNamed:@"test.jpg"]; (2) 画像をファイルパスから読み込む ファイルパスを指定して画像を読み込むためには、NSBundleクラスを用いてパスを作成し、そのパスをinitWithContentsOfFileの引数にしてわたします。ただし、initWithContentsOfFileで作成したUIImageの描画は非常に遅いので注意。 NSString *filePath = [[NSBundle mainBundle] pathForRe
Twitterは2010年の8月末でBasic認証を廃止したため、それ以降はログインのために、OAuth(またはその簡易版のxAuth)を使わなければならなくなりました。 このxAuthですが、得られるメリットはたくさんあるのですが、如何せん実装がめんどくさい&難しいわけです。そこで、今回はxAuthを使ってTwitPicへ投稿するアプリをつくってみたいと思います。 [Step 1] TwitterにxAuthの使用を申請する まずは、Twitterの「アプリケーション登録申請」の画面からアプリケーションの登録を行います。この際、アプリケーションの種類は「クライアントアプリケーション」を、標準のアクセスタイプは「Read & Write」を選択しておいて下さい。 登録後に表示される Consumer key と Consumer secret はアプリ作成の際に必要なので、メモっておいてく
*この記事はAppBank様に寄稿させていただいた記事の一部を抜粋&変更して使用しております。詳しい説明はこちらを御覧ください。 iDOFの特徴 iDOFは、iPhoneで撮影した画像を一眼レフカメラで撮影されたような写真に加工することができるアプリです。 iDOFでは、一眼トイカメラやTiltShift Generatorと違い、ピントをあわせる部分とぼかす部分を手動で選択できるため、より自然な写真を作成することが出来ます。 iDOFの使い方 この画像をiDOFで処理してみたいと思います。 画像を読み込むと、読み込んだ画像が画面に表示されるので、焦点を当てたい部分を指でなぞっていきます。すると選択された範囲に赤いマスクがかかります。また、Paintボタンをタップするとペンの太さなどが変更できます。操作を取り消したい場合は右上のUndoボタンを利用してください。 細かい部分を選択したい場合
画像修復(inpainting)とは画像中の欠損領域を、何らかの方法で修復することを指します。iPhoneアプリとしてはTouchRetouchが有名ですね。 基本的に、画像修復はマルチコアのCPUを使っても2・3分は余裕でかかる処理なのに、TouchRetouchでは、iPhoneという非力なプラットフォームにもかかわらず10秒程度で処理が終了しています。このTouchRetouchがどのようなアルゴリズムで修復を行っているのかが気になったので、少し調べてみました。 画像修復とひとくちにいっても、 1. 輝度値の連続性を考慮した画像修復 2 .特徴空間での補間による画像修復 3. テクスチャの逐次合成による画像修復 4. テクスチャの全体最適化による画像修復 といったものがあるようです。 ここらへんはこちらの論文を参考にさせていただきました。 輝度値の変化と画像の局所性を考慮したパターン
OpenCVを使って、欠損領域を含む画像に対して画像修復を行うプログラムを作成しました。参考にした論文はこちらです。かなりGreedyで時間のかかるアルゴリズムですが、結果画像のクオリティは高いです。 Y. Wexler, E. Shechtman and M. Irani, Space-Time Video Completion. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Washington, June 2004. 入力画像がこちら。 赤色正方形の部分を欠損領域として指定しています。 修復結果がこちら かなりのクオリティで修復できているのが分かりますね。アルゴリズムとしては、先日紹介した4種類のうち4番目の「テクスチャの全体最適化による画像修復」に相当します。 このアルゴリズムの基本的なアイデア
工学系の大学生なら、2回生ぐらいで習うフーリエ変換。フーリエ級数やらフーリエ展開やらの式だけ覚えさせられて、フーリエ変換の意味を理解してない人が多いようです。 そこで、フーリエ変換とは何か?をサクっと説明してみましょう。 全ての信号は、上図のようにsin波の足しあわせで表現することが出来ます。 具体的には、周波数が1のsinxと周波数が2のsin2xと周波数が3のsin3xと・・・周波数がnのsinnxを足し合わせることで、あらゆる信号を表現することが出来るのです。 しかし、ただ単にy=sinx+sin2x+sin3x+・・・としたのでは1種類の信号しか表現できません。そこで、各周波数の振幅を変化させることで、あらゆる信号を表現するのです。 上記の信号の場合、y=4*sinx+0.5*sin2x+2*sin3x+sin4xと表現できます。 さて、先程の図を用いて、周波数を横軸に、振幅の大き
iPhoneネットワークプログラミングの第4回と第5回 iPhoneネットワークプログラミング(複数ファイルDL) iPhoneネットワークプログラミング(XMLパース) のまとめとして、今度はRSSリーダを作ってみましょう。 今回作るRSSリーダは、プログラム内にハードコーディングされたRSSフィードから情報を読み取り、iPhone上に記事のタイトルを表示し、各記事のタイトルをタップするとSafariでその記事が読める、という非常に高機能な仕上がり(笑)役に立たない度合いは、前回作成した画像ビュアといい勝負w iPhoneアプリ:画像ビュアを作る 完成図はこちらです。 今回はプログレスバーすらついておりませんが・・ さて、ではXcodeで開発を進めていきます。毎度おなじみの手順ですが、今回はプロジェクトの種類をNavigation-Basedで作成しています。 Xcodeの「新規作成」-
画像処理といえば、一昔前まではデスクトップパソコンでゴリゴリ計算するっていうイメージが強かったのですが(まぁ、今でもPhotoshopとかはそうか・・・)最近はWebアプリケーションとして画像処理ソフトが動くようになってきています。 HTML5で設計されたサイトで有名なところとしてはDarkroomがあります。ツールが豊富で非常に高機能なのにサクサク動く、とっても素晴らしいサイトになってます。 これにインスパイアされて、ちょっとだけHTML5で画像処理のプログラムを組んでみました。各画像をクリックすると、実際のテストページに移動します。 HTML5でグレースケール化 HTML5でエッジ検出 (8方向のラプラシアンフィルタを使ってます) HTML5で2値化 ちなみに・・・・ おそらくIEでは動きませんね。だめですね、あのブラウザ(笑) FirefoxとChromの最新版、Safari5なら動
これまでは、一度にひとつのページしかダウンロードしませんでしたが、ブラウザで同時に複数のタブを開くときなどには、一度に複数のファイルをダウンロードする必要があります。 このように、一度に複数のHTTPリクエストを処理したい時にはNSOperationクラスを使用して、処理の流れを操作します。NSOperationクラスはメソッド呼び出しなどを独立した操作としてカプセル化するクラスであり、通常はこのクラスのサブクラスを作成して使用します。 イメージ、こんな感じ。 下に、NSOperationを継承したサブクラスを示します。 RequestOperation.h @interface RequestOperation : NSOperation { NSURLRequest* _request; NSMutableData* _data; } - (id)initWithRequest:(NS
前回とは趣を異にしてiPhoneでXMLの解析をしてみたいと思います。 XMLの解析をするためには、XMLパーサが必要なのですが、大きく分けて2種類のパーサが存在します。それがDOM(Document Object Model)とSAX(Simple API for XML)です。DOMでは、全てのXML情報を一度メモリに読み込み木構造に展開します。それに対してSAXでは、シーケンシャルに情報を読み込んでいきます。雰囲気的にはC言語でいうfgetsとgetcの違いみたいな感じです。 iPhoneではメモリの制約が厳しいため、DOMではメモリ不足が起こる可能性があります。そこで、Cocoa標準のSAXパーサであるNSXMLParserクラスを使用します。 次に、RSSファイルのXMLの構造を見てみましょう。itemタグで囲まれた部分が一つの記事に相当します。ひとつの記事は、タイトル、概要、ア
iOS3.13からは上図のように、カメラビューを表示する際に、上に画像をオーバーレイ(重畳)できるようになりました。プログラムとしては、以下のような感じになります。 - (void)viewDidLoad { [super viewDidLoad]; imagePicker = [[UIImagePickerController alloc] init]; imagePicker.delegate = self; } - (IBAction)openCamera { if( [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage i
さて前回(UIScrollViewの使い方(座標表示編))は、 タッチイベントは取得出来るようになったけれども、 スクロールができなくなってしまった、という問題が発生したのでした。 そこで、 ・2本指でスワイプしたときには、スクロール動作。 ・2本指でピンチイン・アウトしたときには、拡大縮小動作。 ・1本指で画面をタッチした場合には座標取得 となるような、プログラムを作ってみましょう。 この方法を用いれば、指が2本の時は画面の拡大縮小移動を行ない、指が1本であれば線を引くといったような動作が可能になるため、多くのドローソフトではこのジェスチャが使われているようです。 この機能を実現するためには、UIScrollViewを継承してオリジナルのScrollViewクラスを作成し、touchesBegan:withEventメソッドなどをオーバライトする必要があります。 上図で説明すると(何度も
iPhoneアプリをつくるシリーズ Twitpicアップローダをつくる Twitpicアップローダをつくる その1 Twitpicアップローダをつくる その2 電卓をつくる iPhoneアプリ:電卓をつくる その1 iPhoneアプリ:電卓をつくる その2 iPhoneアプリ:電卓をつくる その3 iPhoneアプリ:電卓をつくる その4 iPhoneアプリ:電卓をつくる その5 iPhoneアプリ:電卓をつくる 最終回 プログラムのカケラシリーズ UIScrollViewの使い方 UIScrollViewの使い方(スクロール編1) UIScrollViewの使い方(スクロール編2) UIScrollViewの使い方(拡大縮小編) UIScrollViewの使い方(座標表示編) UIScrollViewの使い方(2本指でスクロール編) iPhoneネットワークプログラミング iPhoneネ
このページを最初にブックマークしてみませんか?
『iphone.moo.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く