これは、私が見つけているよりも単純なはずです。
AVFoundation
標準のデリゲート メソッドに戻ってくるフレームがあります。
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
を使用してフレームをグレースケールに変換したい場所Accelerate.Framework
。
フレームワークには を含む変換メソッドのファミリがありvImageConvert_RGBA8888toPlanar8()
、これは私が見たいもののように見えますが、それらの使用方法の例が見つかりません!
これまでのところ、私はコードを持っています:
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
@autoreleasepool {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
/*Lock the image buffer*/
CVPixelBufferLockBaseAddress(imageBuffer,0);
/*Get information about the image*/
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
size_t stride = CVPixelBufferGetBytesPerRow(imageBuffer);
// vImage In
Pixel_8 *bitmap = (Pixel_8 *)malloc(width * height * sizeof(Pixel_8));
const vImage_Buffer inImage = { bitmap, height, width, stride };
//How can I take this inImage and convert it to greyscale?????
//vImageConvert_RGBA8888toPlanar8()??? Is the correct starting format here??
}
}
2 つの質問があります:
(1) 上記のコードでRBGA8888
、正しい開始形式はありますか? Accelerate.Framework
(2)実際にグレースケールに変換する呼び出しを行うにはどうすればよいですか?