頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


グレーのMTLTextureからCIImageを作成する

id<MTLTexture> オブジェクトがある場合にこれをCIImageにしようとした。

Metal逆引きレシピ - Qiita
↑こちらの記事にあるように
let inputImage = CIImage(mtlTexture: texture, options: nil) // —(1)
↑このようにすればCIImageを作成することができる。
ただ、今回はMTLTextureが白黒画像(※1)だ。
MTLTextureDescriptor *textureDescriptor = [MTLTextureDescriptor 
texture2DDescriptorWithPixelFormat:MTLPixelFormatR8Unorm
width:width
height:height
mipmapped:NO];
↑このようにMTLTextureのpixel format はMTLPixelFormatR8Unorm。RGBAなどではなく輝度データがあるだけのデータなのだ。

なので、先ほどの(1)のコードだとデフォでRGBなので

MTLTextureをCIImageにして表示した結果1

↑表示(※2)すると赤くなる。RGBのRの値と解釈するようだ。

なので色空間(color space)をグレーにする。Objective-Cでどうやってオプションを与えるのか随分探したが、次のようにしたところ、、、
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
NSDictionary *options = @{kCIImageColorSpace:(__bridge id)colorSpace};
CIImage *ciimage = [CIImage imageWithMTLTexture:mtlTexture options:options];

//…

CGColorSpaceRelease(colorSpace);
MTLTextureをCIImageにして表示した結果2

↑これでグレーで表示された。

ところが、これだと見ての通り上下逆さまになるので処理が必要になるが、これについてはまた次に。


※1 ARKit x Metal でface trackingをしているのでフロントカメラの画像はYとCbCrで取得できその輝度画像を使用している。

※2 CIImageオブジェクトを↓このようにUIImageにし、画面に表示している。
UIImage *uiimage = [UIImage imageWithCIImage:ciimage];




スポンサーサイト




<< CIImageオブジェクトの上下反転ができない  TopPage  PythonのOpenCVでデータセット内の重複画像をチェックする >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1304-6039c0f5




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.