use*_*903 1 objective-c brightness ios luminance
我正在尝试制作一个应用程序,我必须像这个应用程序一样计算相机的亮度: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);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是问题:
"找不到实例方法'-rgbaPixels'(返回类型默认为'id')"&"不兼容的指针类型初始化'unsigned char*',表达式为'id'"
非常感谢 !=)
Bra*_*son 14
让我建议一种替代方法,而不是对输入视频帧中的每个像素进行昂贵的CPU绑定处理.我的开源GPUImage框架内置了一个发光度提取器,它使用基于GPU的处理来提供摄像机的实时亮度读数.
设置它相对容易.您只需分配一个GPUImageVideoCamera实例来表示相机,分配GPUImageLuminosity过滤器,并将后者添加为前者的目标.如果要将摄像头源显示到屏幕,请创建GPUImageView实例并将其添加为GPUImageVideoCamera的另一个目标.
您的光度提取器将使用回调块返回计算时的亮度值.使用以下代码设置此块:
[(GPUImageLuminosity *)filter setLuminosityProcessingFinishedBlock:^(CGFloat luminosity, CMTime frameTime) {
// Do something with the luminosity
}];
Run Code Online (Sandbox Code Playgroud)
如果你很好奇,我会在这个答案中描述这种光度提取的内部运作.对于iPhone 4上的640x480视频帧,此提取器在~6 ms内运行.
你会很快发现的一件事是,当启用自动曝光时,iPhone相机的平均亮度几乎总是在50%左右.这意味着您需要使用相机元数据中的曝光值来补充光度测量,以获得任何有意义的亮度测量.
| 归档时间: |
|
| 查看次数: |
5139 次 |
| 最近记录: |