Iphone 带角点检测的GPUImage叠加实时视频
尝试使用GPUImage获得一个基本过滤器,但不确定如何正确设置它,以便在检测角点时在实时视频提要上显示十字光标。我尝试将十字光标与视频一起添加到混合过滤器,然后将其添加到gpuimageview,但我得到的只是一个白色屏幕。有什么想法吗Iphone 带角点检测的GPUImage叠加实时视频,iphone,ios,gpuimage,Iphone,Ios,Gpuimage,尝试使用GPUImage获得一个基本过滤器,但不确定如何正确设置它,以便在检测角点时在实时视频提要上显示十字光标。我尝试将十字光标与视频一起添加到混合过滤器,然后将其添加到gpuimageview,但我得到的只是一个白色屏幕。有什么想法吗 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. videoCam
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
GPUImageView *filteredVideoView = (GPUImageView *)self.view;
GPUImageCrosshairGenerator *crosshairGenerator = [[GPUImageCrosshairGenerator alloc] init];
crosshairGenerator.crosshairWidth = 15.0;
[crosshairGenerator forceProcessingAtSize:CGSizeMake(480.0, 640.0)];
customFilter = [[GPUImageHarrisCornerDetectionFilter alloc] init];
[customFilter setCornersDetectedBlock:^(GLfloat* cornerArray, NSUInteger cornersDetected, CMTime frameTime){
[crosshairGenerator renderCrosshairsFromArray:cornerArray count:cornersDetected frameTime:frameTime];
NSLog(@"corners: %u", cornersDetected);
}];
GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
[blendFilter forceProcessingAtSize:CGSizeMake(480.0, 640.0)];
[videoCamera addTarget:blendFilter];
[crosshairGenerator addTarget:blendFilter];
[blendFilter addTarget:filteredVideoView];
[videoCamera startCameraCapture];
}
这就是您的代码在Swift 2.0中的显示方式
var liveCam:GPUImageVideoCamera!
var edgesDetector:GPUImageHarrisCornerDetectionFilter!
var crosshairGenerator:GPUImageCrosshairGenerator!
@IBOutlet weak var camView: GPUImageView!
override func viewDidLoad() {
super.viewDidLoad()
liveCam = GPUImageVideoCamera(sessionPreset: AVCaptureSessionPreset640x480, cameraPosition: .Back)
liveCam.outputImageOrientation = .Portrait
crosshairGenerator = GPUImageCrosshairGenerator()
crosshairGenerator.crosshairWidth = 15
crosshairGenerator.forceProcessingAtSize(CGSize(width: 480, height: 640))
edgesDetector = GPUImageHarrisCornerDetectionFilter()
edgesDetector.blurRadiusInPixels = 2 //Default value
edgesDetector.threshold = 0.2 //Default value
edgesDetector.cornersDetectedBlock = {(cornerArray:UnsafeMutablePointer<GLfloat>,cornersDetected:UInt,frameTime:CMTime) -> Void in
self.crosshairGenerator.renderCrosshairsFromArray(cornerArray, count: cornersDetected, frameTime: frameTime)
print("\(cornerArray) =-= \(cornersDetected) =-= \(frameTime)")
}
liveCam.addTarget(edgesDetector)
edgesDetector.addTarget(crosshairGenerator)
crosshairGenerator.addTarget(camView)
liveCam.startCameraCapture()
}
var-liveCam:GPUImageVideoCamera!
var edgesDetector:GPUImageHarrisCornerDetectionFilter!
var crosshairGenerator:GPUImageCrosshairGenerator!
@IBVAR camView:GPUImageView!
重写func viewDidLoad(){
super.viewDidLoad()
liveCam=GPUImageVideoCamera(会话预设:AVCaptureSessionPreset640x480,cameraPosition:.Back)
liveCam.outputImageOrientation=.Portrait
crosshairGenerator=GPUImageCrosshairGenerator()
crosshairGenerator.crosshairWidth=15
crosshairGenerator.forceProcessingAtSize(CGSize(宽:480,高:640))
edgesDetector=gpuimageriscornerDetectionFilter()
edgesDetector.blurRadiusInPixels=2//默认值
edgesDetector.threshold=0.2//默认值
edgesDetector.cornersDetectedBlock={(cornerArray:UnsafemtablePointer,cornersDetected:UInt,frameTime:CMTime)->中的Void
self.crosshairGenerator.renderCrosshairsFromArray(cornerArray,计数:cornersDetected,帧时:帧时)
打印(“\(角落数组)=-=\(角落检测)=-=\(帧时间)”)
}
liveCam.addTarget(edgesDetector)
edgesDetector.addTarget(十字线生成器)
crosshairGenerator.addTarget(camView)
liveCam.startCameraCapture()
}
结果是:
为什么不在GPUImageView之外添加十字线?就像使用另一个视图的覆盖一样?我的意思是在ViewController的视图中的GPUImageView顶部设置一个CAShapeLayer,并在其上绘制十字线。除非我遗漏了您试图实现的其他目标,否则这是非常简单的。我可能遗漏了它,但您何时将
customFilter
添加为videoCamera
的目标?就目前的情况来看,看起来你并没有将帧送入角探测器。@BradLarson看起来就是这样。不确定如何正确添加所有内容