我正在尝试制作一个应用程序,我必须像这个应用程序一样计算相机的亮度: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’类型的表达式初始化‘unsigned char *’时不兼容的指针类型”
多谢 ! =)
让我建议一种替代方法,而不是对输入视频帧中的每个像素进行昂贵的 CPU 密集处理。我的开源GPUImage该框架内置了一个亮度提取器,它使用基于 GPU 的处理来提供来自摄像机的实时亮度读数。
设置起来相对容易。您只需分配一个 GPUImageVideoCamera 实例来表示相机,分配一个 GPUImageLuminosity 滤镜,然后将后者添加为前者的目标。如果您想将相机源显示到屏幕上,请创建一个 GPUImageView 实例并将其添加为 GPUImageVideoCamera 的另一个目标。
您的光度提取器将使用回调块来返回计算后的光度值。该块是使用如下代码设置的:
[(GPUImageLuminosity *)filter setLuminosityProcessingFinishedBlock:^(CGFloat luminosity, CMTime frameTime) {
// Do something with the luminosity
}];
我在中描述了这种光度提取的内部工作原理这个答案,如果你好奇的话。对于 iPhone 4 上的 640x480 视频帧,此提取器的运行时间约为 6 毫秒。
您很快就会发现的一件事是,当启用自动曝光时,iPhone 相机的平均亮度几乎总是在 50% 左右。这意味着您需要使用相机元数据中的曝光值来补充光度测量值,以获得任何有意义的亮度测量值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)