2011-02-10 5 views
1

ウェブカメラが表示する画像からピクセルカラーを取得しようとしています。私は、ピクセルの色が時間とともにどのように変化しているのかを見たいと思います。ウェブカメラからピクセルカラーを取得する

私の現在のソリューションは、それが動作し、私に正しい答えを与えるが、私はこれを正しくやっているか、私はいくつかのステップを切り出すことができれば、私は100%を確認していない、CPUのLOTを吸います。

- (IBAction)addFrame:(id)sender 
{ 
    // Get the most recent frame 
    // This must be done in a @synchronized block because the delegate method that sets the most recent frame is not called on the main thread 
    CVImageBufferRef imageBuffer; 

    @synchronized (self) { 
     imageBuffer = CVBufferRetain(mCurrentImageBuffer); 
    } 

    if (imageBuffer) { 
     // Create an NSImage and add it to the movie 
     // I think I can remove some steps here, but not sure where. 
     NSCIImageRep *imageRep = [NSCIImageRep imageRepWithCIImage:[CIImage imageWithCVImageBuffer:imageBuffer]]; 
     NSSize n = {320,160 }; 
     //NSImage *image = [[[NSImage alloc] initWithSize:[imageRep size]] autorelease]; 
     NSImage *image = [[[NSImage alloc] initWithSize:n] autorelease]; 
     [image addRepresentation:imageRep]; 
     CVBufferRelease(imageBuffer); 


     NSBitmapImageRep* raw_img = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]]; 
     NSLog(@"image width is %f", [image size].width); 
     NSColor* color = [raw_img colorAtX:1279 y:120]; 

     float colourValue = [color greenComponent]+ [color redComponent]+ [color blueComponent]; 
     [graphView setXY:10 andY:200*colourValue/3]; 

    NSLog(@"%0.3f", colourValue); 

他のアイデアをお試しいただきありがとうございます。 ありがとうございます。

答えて

1

これを効率化するには、いくつかの方法があります。 (サンプルはUIImageを使用していますが、それはNSImageのために実質的に同一だ)画像にCVImageBufferRefから取得するクリーンな方法を提示しthis Tech Q&AimageFromSampleBuffer:方法、を見てみましょう。

CVImageBufferRefのピクセル値をそのまま変換せずに引き出すこともできます。バッファのベースアドレスを取得したら、任意のピクセルのオフセットを計算し、そこから値を読み取るだけです。

+0

ありがとうございました。私はこのガイドを少し使い、バッファからデータを取得しようとしています。 –

関連する問題