Я успешно добавил генератор перекрестия и фильтр обнаружения углов Харриса на выход GPUImageStillCamera
, а также на живое видео с GPUImageVideoCamera
.
Сейчас я пытаюсь заставить это работать с набором фотографий на UIImageView
, но на выходе постоянно получаю черный экран. Я читал проблемы, перечисленные на GitHub, в отношении проекта Брэда Ларсона GPUImage, но они, похоже, были больше связаны с фильтрами типа смешивания, и, следуя предложениям, я все еще сталкиваюсь с той же проблемой.
Я пытался изменить каждую строку кода, чтобы следовать различным примерам, которые я видел, и следовать примеру кода Брэда в демонстрационных проектах Filter, но результат всегда один и тот же.
Мой текущий код, как только я сделал фотографию (которую я проверяю, чтобы убедиться, что на данный момент это не просто черная фотография):
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:self.photoView.image];
GPUImageHarrisCornerDetectionFilter *cornerFilter1 = [[GPUImageHarrisCornerDetectionFilter alloc] init];
[cornerFilter1 setThreshold:0.1f];
[cornerFilter1 forceProcessingAtSize:self.photoView.frame.size];
GPUImageCrosshairGenerator *crossGen = [[GPUImageCrosshairGenerator alloc] init];
crossGen.crosshairWidth = 15.0;
[crossGen forceProcessingAtSize:self.photoView.frame.size];
[cornerFilter1 setCornersDetectedBlock:^(GLfloat* cornerArray, NSUInteger cornersDetected, CMTime frameTime, BOOL endUpdating)
{
[crossGen renderCrosshairsFromArray:cornerArray count:cornersDetected frameTime:frameTime];
}];
[stillImageSource addTarget:crossGen];
[crossGen addTarget:cornerFilter1];
[crossGen prepareForImageCapture];
[stillImageSource processImage];
UIImage *currentFilteredImage = [crossGen imageFromCurrentlyProcessedOutput];
UIImageWriteToSavedPhotosAlbum(currentFilteredImage, nil, nil, nil);
[self.photoView setImage:currentFilteredImage];
Я пробовал prepareForImageCapture
на обоих фильтрах, ни на одном, добавляя две цели в обратном порядке, вызывая imageFromCurrentlyProcessedOutput
на любом фильтре, я пробовал без генератора перекрестия, я пытался использовать локальные переменные и переменные, объявленные в файле . ч файл. Я пробовал с forceProcessingAtSize
и без него на каждом из фильтров.
Я не могу думать ни о чем другом, что я не пытался получить результат. Приложение работает на iPhone 7.0 в Xcode 5.0.1. На фото работают стандартные фильтры, т.е. простой GPUImageSobelEdgeDetectionFilter
, включенный в тестовое приложение SimpleImageFilter
.
Какие-либо предложения? Я сохраняю вывод в фотопленку, чтобы проверить, что не только я не могу правильно отобразить его. Я подозреваю, что это где-то глупая ошибка, но я не знаю, что еще попробовать сейчас.
Спасибо.
Отредактировано, чтобы добавить: обнаружение углов определенно работает, так как в зависимости от установленного порога оно возвращает от 6 до 511 углов.