頭と尻尾はくれてやる!

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


NSImageから白黒画像のデータが欲しい(1)

macOSでSCNViewのスクショをコードで得る
↑これの続き。
繰り返し書くけど、機械学習(CNN)で使うので白黒画像が欲しい。
なので上の記事のようにsnapshotでNSImageオブジェクトを得て、それを白黒化したNSImageを得ればいいな、と思って調べたところ、下のような記事があったので試してみた。

カラー画像のモノクロ化で苦戦中 | Unlimited

-(NSImage *)grayishImage:(NSImage *)image
{
    NSData *tiffData = [image TIFFRepresentation];
    NSBitmapImageRep *bitmap = [NSBitmapImageRep imageRepWithData:tiffData];
    
    CIImage *inputImage = [[CIImage alloc] initWithBitmapImageRep:bitmap];
    CIColor *ciColor = [[CIColor alloc] initWithColor:[NSColor whiteColor]];
    NSNumber *nsIntensity = @1.0f;
    
    CIFilter *filter = [CIFilter filterWithName:@"CIColorMonochrome" keysAndValues:@"inputImage", inputImage, @"inputColor", ciColor, @"inputIntensity", nsIntensity, nil];
    CIImage *outputImage = [filter valueForKey:@"outputImage"];
    NSBitmapImageRep *outBitmap = [[NSBitmapImageRep alloc] initWithCIImage:outputImage];
    
    NSImage *outImage = [[NSImage alloc] initWithData:[outBitmap TIFFRepresentation]];
    
    return outImage;
}
↑コードはこんな感じ。

スクリーンショットを白黒画像にしたところ

↑確かに白黒にはなった(前記事と同じくSceneKitのSCNViewオブジェクトのスクショをsnapshotで撮影し、半分のサイズで重ねて表示してるところ)。

ところが、だ。

この方法で得たNSImageオブジェクトのcolor spaceを調べる(※)と
kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1
などと出てくる。おい、RGBの値を持ってるのか?

MNISTの白黒画像

↑ちなみにMNISTで使う白黒画像を同じように確認すると
kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile
と表示される。

あー、やっぱりさっきのは白黒に見えてるけどデータとしてはRGBの値を持ってるのか、、、
機械学習で使う場合、これではまずい。
ということで続く。


(※)NSImageオブジェクトのcolor spaceを調べる。
{
    CGImageSourceRef source = CGImageSourceCreateWithData((CFDataRef)[image TIFFRepresentation], NULL);
    CGImageRef cgImage =  CGImageSourceCreateImageAtIndex(source, 0, NULL);
    NSLog(@"colorSpace=%@",CGImageGetColorSpace(cgImage));
}



version memo
macOS High Sierra 10.13.6


スポンサーサイト

<< NSImageから白黒画像のデータが欲しい(2)  TopPage  奥河内くろまろの郷で自転車借りてサイクリングしてきた >>

コメント


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

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1220-bfd5d629




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

FC2Ad