我想知道是否有可能使用CoreImage
或GPUImage
对一组图像进行曝光。我该怎么做呢?
示例:假设您有4幅图像,但第三幅的曝光情况不同。你怎样才能使曝光达到水平,使所有4幅图像都有相同的曝光量呢?
我的一个想法是使用AVCapture
测量和匹配曝光,即如果输入图像为- 2.0,那么只需使用CoreImage
添加2.0即可。
另一个想法是实现直方图均衡。
以前有人处理过同样的任务吗?有什么见解吗?
发布于 2016-07-28 00:08:35
您可以使用CoreImage (#import )和ImageIO (CGImage)提取带有EXIF字典键键的exif元数据:kCGImagePropertyExifExposureTime、kCGImagePropertyExifExposureMode、kCGImagePropertyExifExposureProgram、kCGImagePropertyExifExposureBiasValue、kCGImagePropertyExifExposureIndex、kCGImagePropertyExifWhiteBalance
- (NSDictionary*) exifData: (NSString*) path {
NSDictionary* dic = nil;
NSURL* url = [NSURL fileURLWithPath: path];
if ( url )
{
CGImageSourceRef source = CGImageSourceCreateWithURL ((CFURLRef) url, NULL);
if (source != nil)
{
CFDictionaryRef metadataRef =
CGImageSourceCopyPropertiesAtIndex (source, 0, NULL);
if (metadataRef)
{
NSDictionary* immutableMetadata = (NSDictionary *)metadataRef;
if (immutableMetadata)
{
dic = [NSDictionary dictionaryWithDictionary : (NSDictionary *)metadataRef];
}
CFRelease ( metadataRef );
}
CFRelease(source);
source = nil;
}
}
return dic;
}
用法:
NSDictionary* dic = [self exifData: path];
if (dic)
{
NSString *s = [dic valueForKey: kCGImagePropertyExifExposureTime];
NSLog(@"Image : %@ - ExposureTime : %.2f", path, [s floatValue]);
}
然后用以下方法改变曝光或白平衡:
- (UIImage *) changeImageExposure:(NSString*) imagename exposure:(float) exposure {
CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed: imagename]];
CIFilter *exposureAdjustmentFilter = [CIFilter filterWithName:@"CIExposureAdjust"];
[exposureAdjustmentFilter setValue:inputImage forKey:kCIInputImageKey];
[exposureAdjustmentFilter setValue:[NSNumber numberWithFloat:exposure] forKey:@"inputEV"];
CIImage *outputImage = exposureAdjustmentFilter.outputImage;
CIContext *context = [CIContext contextWithOptions:nil];
return [UIImage imageWithCGImage:[context createCGImage:outputImage fromRect:outputImage.extent]];
}
https://stackoverflow.com/questions/38397154
复制相似问题