1

アプリケーションを作成しようとしていますが、このアプリケーションのようにカメラの明るさを計算する必要があります:http: //itunes.apple.com/us/app/megaman-luxmeter/id455660266?mt=8

私はこのドキュメントを見つけました:http://b2cloud.com.au/tutorial/obtaining-luminosity-from-an-ios-camera

しかし、私はそれを画像ではなくカメラに直接適応させる方法を知りません。これが私のコードです:

    Image = [[UIImagePickerController alloc] init];
    Image.delegate = self;
    Image.sourceType = UIImagePickerControllerCameraCaptureModeVideo;
    Image.showsCameraControls = NO;
    [Image setWantsFullScreenLayout:YES];
    Image.view.bounds = CGRectMake (0, 0, 320, 480);
    [self.view addSubview:Image.view];

    NSArray* dayArray = [NSArray arrayWithObjects:Image,nil];
    for(NSString* day in dayArray)
    {
        for(int i=1;i<=2;i++)
        {
            UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"%@%d.png",day,i]];
            unsigned char* pixels = [image rgbaPixels];
            double totalLuminance = 0.0;
            for(int p=0;p<image.size.width*image.size.height*4;p+=4)
            {
                totalLuminance += pixels[p]*0.299 + pixels[p+1]*0.587 + pixels[p+2]*0.114;
            }
            totalLuminance /= (image.size.width*image.size.height);
            totalLuminance /= 255.0;
            NSLog(@"%@ (%d) = %f",day,i,totalLuminance);
        }
    }

ここに問題があります:

"インスタンスメソッド'-rgbaPixels'が見つかりません(戻り値の型はデフォルトで'id'になります)"&"型'id'の式で'unsignedchar*'を初期化する互換性のないポインタ型"

どうもありがとう !=)

4

3 に答える 3

14

入力ビデオ フレーム内の各ピクセルの CPU バウンド処理を行う代わりに、別のアプローチを提案させてください。私のオープン ソースのGPUImageフレームワークには、GPU ベースの処理を使用してビデオ カメラからのライブの明るさの読み取り値を提供する、明るさ抽出機能が組み込まれています。

これを設定するのは比較的簡単です。カメラを表す GPUImageVideoCamera インスタンスを割り当て、GPUImageLuminosity フィルターを割り当て、後者を前者のターゲットとして追加するだけです。カメラ フィードを画面に表示する場合は、GPUImageView インスタンスを作成し、それを GPUImageVideoCamera の別のターゲットとして追加します。

明度エクストラクタは、コールバック ブロックを使用して、計算された明度値を返します。このブロックは、次のようなコードを使用して設定されます。

[(GPUImageLuminosity *)filter setLuminosityProcessingFinishedBlock:^(CGFloat luminosity, CMTime frameTime) {
     // Do something with the luminosity
   }];

興味があれば、この回答でこの光度抽出の内部の仕組みについて説明します。このエクストラクタは、iPhone 4 で 640x480 フレームのビデオに対して最大 6 ミリ秒で実行されます。

すぐにわかることの 1 つは、自動露出が有効になっている場合、iPhone カメラの平均光度はほぼ常に 50% 前後であるということです。これは、意味のある明るさの測定値を取得するために、カメラのメタデータからの露出値で明るさの測定値を補足する必要があることを意味します。

于 2013-01-30T20:19:40.017 に答える
0

なぜカメラ画像を に配置するのNSArray *dayArrayですか? 5 行後、その配列からそれを削除しますが、オブジェクトを として扱いますNSString。AnNSStringには がありませんrgbaPixels。コピーして貼り付けた例には、1 日のさまざまな時間に撮影された写真に対応するファイル名の配列があります。次に、それらの画像ファイルを開き、光度の分析を実行します。

あなたの場合、読み取るファイルはありません。両方の外側のforループ、つまり ondayiは消えなければなりません。Imageから提供された にすでにアクセスできますUIImagePickerController。サブビューを追加した直後に、unsigned char *pixels = [Image rgbaPixels];どこImageから取得した画像であるかのように、原則としてピクセルにアクセスできますUIImagePickerController

ただし、これはあなたがやりたいことではないかもしれません。あなたの目標はUIImagePickerController、キャプチャモードで表示してから、光度を継続的に測定することだと思います。この目的のためImageに、メンバー変数に変換し、タイマー コールバックからそのピクセルに繰り返しアクセスすることができます。

于 2013-01-30T18:27:52.753 に答える