【发布时间】:2016-06-30 11:39:32
【问题描述】:
我想在我的应用中实现自定义摄像头。所以,我正在使用AVCaptureDevice 创建这个相机。
现在我只想在我的自定义相机中显示灰色输出。所以我尝试使用setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains: 和AVCaptureWhiteBalanceGains 来实现这一点。我为此使用AVCamManual: Extending AVCam to Use Manual Capture。
- (void)setWhiteBalanceGains:(AVCaptureWhiteBalanceGains)gains
{
NSError *error = nil;
if ( [videoDevice lockForConfiguration:&error] ) {
AVCaptureWhiteBalanceGains normalizedGains = [self normalizedGains:gains]; // Conversion can yield out-of-bound values, cap to limits
[videoDevice setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:normalizedGains completionHandler:nil];
[videoDevice unlockForConfiguration];
}
else {
NSLog( @"Could not lock device for configuration: %@", error );
}
}
但是为此,我必须在 1 到 4 之间传递 RGB 增益值。所以我创建了这个方法来检查 MAX 和 MIN 值。
- (AVCaptureWhiteBalanceGains)normalizedGains:(AVCaptureWhiteBalanceGains) gains
{
AVCaptureWhiteBalanceGains g = gains;
g.redGain = MAX( 1.0, g.redGain );
g.greenGain = MAX( 1.0, g.greenGain );
g.blueGain = MAX( 1.0, g.blueGain );
g.redGain = MIN( videoDevice.maxWhiteBalanceGain, g.redGain );
g.greenGain = MIN( videoDevice.maxWhiteBalanceGain, g.greenGain );
g.blueGain = MIN( videoDevice.maxWhiteBalanceGain, g.blueGain );
return g;
}
我也在尝试获得不同的效果,比如传递 RGB 增益静态值。
- (AVCaptureWhiteBalanceGains)normalizedGains:(AVCaptureWhiteBalanceGains) gains
{
AVCaptureWhiteBalanceGains g = gains;
g.redGain = 3;
g.greenGain = 2;
g.blueGain = 1;
return g;
}
现在,我想在我的自定义相机上设置这个灰度(公式:像素 = 0.30078125f * R + 0.5859375f * G + 0.11328125f * B)。这个公式我试过了。
- (AVCaptureWhiteBalanceGains)normalizedGains:(AVCaptureWhiteBalanceGains) gains
{
AVCaptureWhiteBalanceGains g = gains;
g.redGain = g.redGain * 0.30078125;
g.greenGain = g.greenGain * 0.5859375;
g.blueGain = g.blueGain * 0.11328125;
float grayScale = g.redGain + g.greenGain + g.blueGain;
g.redGain = MAX( 1.0, grayScale );
g.greenGain = MAX( 1.0, grayScale );
g.blueGain = MAX( 1.0, grayScale );
g.redGain = MIN( videoDevice.maxWhiteBalanceGain, g.redGain );
g.greenGain = MIN( videoDevice.maxWhiteBalanceGain, g.greenGain);
g.blueGain = MIN( videoDevice.maxWhiteBalanceGain, g.blueGain );
return g;
}
那么我怎样才能在 1 到 4 之间传递这个值..?
有什么方法或规模来比较这些东西..?
任何帮助将不胜感激。
【问题讨论】:
-
调整白平衡不会将彩色图像转换为黑白图像。您需要找到不同的 API 才能做到这一点。例如vImageMatrixMultiply_ARGB8888
-
@Mats:是的,谢谢..!!请提供任何示例代码以便更好地理解。
-
也许这个,stackoverflow.com/questions/21207099,问题有帮助。
-
谢谢@Mats。但我仍然在寻找解决方案。此链接无法帮助解决此问题。还有其他解决方案吗?
标签: ios objective-c swift avcapturedevice avcapture