SlideShare a Scribd company logo
1 of 20
Core Image
CIFilterでの画像処理
  iPhone Developer Workshop
          2012/09/28
自己紹介

ZuQ9Nn(ずきゅ∼ん)

最近はお仕事でObjective-c、iOSアプ
リを書いています。もともとはPHPな
どサーバーサイドのプログラマ
今回の勉強のきっかけ


AppStoreには、いっぱいトイカメラ系
のアプリがあるけど、あれってどう
やってつくってんの?
今回のサンプル

Xcode 4.5.1
iOS6
ARCあり

Storyborardを使う
これまでの画像処理
    Sepiatone(セピア)変換の例

    UIImageからCGImageに変換しピクセ
    ルデータにアクセスする

    ピクセルデータからRGBを取得し変換
SepiatoneNotCIFilterViewControllerのapplyFilterメソッドを参照
画像処理の問題点
   コードが長い

   コードを読んでも意味がわかりにくい

   画像処理のロジックを学習する必要


もう少し簡単で心理的ハードルが低いものはないか?

      Core ImageのCIFilter
CIFilterでのコード
CoreImage.frameworkの追加を忘れずに!




import文も忘れずに #import   <CoreImage/CoreImage.h>
CIFilterでの処理の流れ

CIImageオブジェクトの作成

CIFilterオブジェクトの作成と設定

Filterを適用した画像の取得
CIFilterでのコード
CIImage *ciImage = [[CIImage alloc] initWithImage:self.originalImageView.image];

CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"];
[filter setDefaults];
[filter setValue:ciImage forKey:@"inputImage"];
[filter setValue:[NSNumber numberWithFloat: 0.9f] forKey:@"inputIntensity"];

CIImage *outputImage = filter.outputImage;

CIContext *context = [CIContext contextWithOptions: nil];
CGImageRef cgImage = [context createCGImage: outputImage fromRect:
outputImage.extent];
UIImage *resultUIImage = [UIImage imageWithCGImage: cgImage];
CGImageRelease(cgImage);

self.filterImageView.image = resultUIImage;

SepiatoneCIFilterViewControllerのapplyFilterメソッドを参照
CIFilter応用例(1)

Filterによってはパラメーターを調整す
ることで色の濃淡を簡単に変更するこ
とが可能
CISepiatoneコード改良
 CIImage *ciImage = [[CIImage alloc] initWithImage:self.originalImageView.image];

 CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"];
 [filter setDefaults];
 [filter setValue:ciImage forKey:@"inputImage"];
 [filter setValue:[NSNumber numberWithFloat: self.slider.value]
 forKey:@"inputIntensity"];

 CIImage *outputImage = filter.outputImage;

 CIContext *context = [CIContext contextWithOptions: nil];
 CGImageRef cgImage = [context createCGImage: outputImage fromRect:
 outputImage.extent];
 UIImage *resultUIImage = [UIImage imageWithCGImage: cgImage];
 CGImageRelease(cgImage);

 self.filterImageView.image = resultUIImage;

SepiatoneCIFilterInputIntensityViewControllerのapplyFilterメ
ソッドを参照
CIFilter応用例(2)
FilterによってはRGBの値を変化させる
ことによって全く違った画像処理が可
能

CIFilterのsetValue、InputColorの属性
を指定する
CIMonochromeのコード
CIImage *ciImage = [[CIImage alloc] initWithImage:self.originalImageView.image];

CIFilter *filter = [CIFilter filterWithName:@"CIMonochrome"];
[filter setDefaults];
[filter setValue:ciImage forKey:@"inputImage"];
[filter setValue:[NSNumber numberWithFloat: 0.9f] forKey:@"inputIntensity"];

[filter setValue:[CIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:1.0f]
              forKey: @"inputColor"];

CIImage *outputImage = filter.outputImage;

CIContext *context = [CIContext contextWithOptions: nil];
CGImageRef cgImage = [context createCGImage: outputImage fromRect:
outputImage.extent];
UIImage *resultUIImage = [UIImage imageWithCGImage: cgImage];
CGImageRelease(cgImage);

self.filterImageView.image = resultUIImage;


MonochoromeViewControllerのapplyFilterメソッドを参照
CIFilterの応用例(3)

FilterとFilterを組み合わせて新たな
Filterを作成することが出来る

プログラムのポイントはFilterごとに
setDefaultsを指定する
CIColorInvert + CIHueAdjust
 CIImage *ciImage = [[CIImage alloc] initWithImage:self.originalImageView.image];

 CIFilter *colorInvertfilter = [CIFilter filterWithName:@"CIColorInvert"];
 [colorInvertfilter setDefaults];
 [colorInvertfilter setValue:ciImage forKey: @"inputImage"];

 CIFilter *hueAdjustFilter = [CIFilter filterWithName:@"CIHueAdjust"];
 [hueAdjustFilter setDefaults];
 [hueAdjustFilter setValue:[colorInvertfilter valueForKey:@"outputImage"]
 forKey:@"inputImage"];
 [hueAdjustFilter setValue:[NSNumber numberWithFloat:1.62] forKey:@"inputAngle"];

 CIImage *outputImage = [hueAdjustFilter valueForKey:@"outputImage"];

 CIContext *context = [CIContext contextWithOptions:nil];
 CGImageRef cgImage = [context createCGImage: outputImage fromRect:
 outputImage.extent];
 UIImage *resultUIImage = [UIImage imageWithCGImage: cgImage];
 CGImageRelease(cgImage);

 self.colorInvertAndHueAdjustFilterImageView.image = resultUIImage;

CororInvertAndHueAdjustViewControllerの
applyColorInvertAndHueAdjustFilterメソッドを参照
CIFilterのメリット

コードが短い

画像処理のロジックを知らなくても
Filter名とパラメータを指定することで
簡単に画像処理が可能
CIFilterでメリット
iOS5以降からしか使えない

Filter名がどのような画像処理結果にな
るかわかりにくい

定義されていない複雑な画像処理は出
来ない

資料が少ない
CIFilter資料(書籍)

詳細iOS5プログラミング

iOS5プログラミングブック

iOS Core Frameworksテクニカルガイ
ド
CIFilter資料(Web)
OneWorldの開発ブログ iOS5 Core
Image フレームワーク使い方(http://
oneworld-inc.jp/blog/?p=148)
OneWorldの開発ブログ iOS5 Core
Imageフィルタ(http://oneworld-inc.jp/
blog/?p=191)
ご清聴ありがとうございました

More Related Content

Similar to I phonedevws20121028ci filter

vImageのススメ(改訂版)
vImageのススメ(改訂版)vImageのススメ(改訂版)
vImageのススメ(改訂版)Shuichi Tsutsumi
 
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageViewTitanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView濱田 章吾
 
HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説Hideki Akiba
 
UIImagePickerController よもやま話
UIImagePickerController よもやま話UIImagePickerController よもやま話
UIImagePickerController よもやま話Kei Kusakari
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
iOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotipsiOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotipsYusuke Kita
 
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of GraniA Framework for LightUp Applications of Grani
A Framework for LightUp Applications of GraniYoshifumi Kawai
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料OCHI Shuji
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 Eastirgaly
 
Core Animation 使って見た
Core Animation 使って見たCore Animation 使って見た
Core Animation 使って見たOCHI Shuji
 
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser DetectionShibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detectiontakesako
 
20141018 selenium appium_cookpad
20141018 selenium appium_cookpad20141018 selenium appium_cookpad
20141018 selenium appium_cookpadKazuaki Matsuo
 
Spresense Study meeting#1 How to use the Camera board
Spresense Study meeting#1 How to use the Camera boardSpresense Study meeting#1 How to use the Camera board
Spresense Study meeting#1 How to use the Camera board義則 太田
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門cch-robo
 
iOS 10 new Camera
iOS 10 new CameraiOS 10 new Camera
iOS 10 new CameraGaprot
 

Similar to I phonedevws20121028ci filter (20)

vImageのススメ(改訂版)
vImageのススメ(改訂版)vImageのススメ(改訂版)
vImageのススメ(改訂版)
 
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageViewTitanium もくもく会第6回 Kii Cloud と TiGPUImageView
Titanium もくもく会第6回 Kii Cloud と TiGPUImageView
 
HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説
 
UIImagePickerController よもやま話
UIImagePickerController よもやま話UIImagePickerController よもやま話
UIImagePickerController よもやま話
 
AndroidでDIxAOP
AndroidでDIxAOPAndroidでDIxAOP
AndroidでDIxAOP
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
iOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotipsiOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotips
 
GCPの画像認識APIの紹介
GCPの画像認識APIの紹介 GCPの画像認識APIの紹介
GCPの画像認識APIの紹介
 
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of GraniA Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
 
Hands on
Hands onHands on
Hands on
 
Swift Study Vol.4
Swift Study Vol.4Swift Study Vol.4
Swift Study Vol.4
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
 
Core Animation 使って見た
Core Animation 使って見たCore Animation 使って見た
Core Animation 使って見た
 
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser DetectionShibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
 
20141018 selenium appium_cookpad
20141018 selenium appium_cookpad20141018 selenium appium_cookpad
20141018 selenium appium_cookpad
 
Spresense Study meeting#1 How to use the Camera board
Spresense Study meeting#1 How to use the Camera boardSpresense Study meeting#1 How to use the Camera board
Spresense Study meeting#1 How to use the Camera board
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門
 
iOS 10 new Camera
iOS 10 new CameraiOS 10 new Camera
iOS 10 new Camera
 

I phonedevws20121028ci filter

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n