Core Image CIPerspectiveTransform Filter: как использовать CIVectors?

Мне очень трудно найти документацию в Интернете, которая четко объясняет, как правильно использовать фильтр CIPerspectiveTransform от Core Image. В частности, при установке значений CIVector для inputTopLeft , inputTopRight , inputBottomRight и inputBottomLeft , что эти векторы делают с изображением? (То есть, какова математика за тем, как эти векторы искажают мой образ?)

В настоящее время это код, который я использую. Он не падает, но не показывает изображение:

 CIImage *myCIImage = [[CIImage alloc] initWithImage:self.image]; CIContext *context = [CIContext contextWithOptions:nil]; CIFilter *filter = [CIFilter filterWithName:@"CIPerspectiveTransform" keysAndValues:@"inputImage", myCIImage, @"inputTopLeft", [CIVector vectorWithX:118 Y:484], @"inputTopRight", [CIVector vectorWithX:646 Y:507], @"inputBottomRight", [CIVector vectorWithX:548 Y:140], @"inputBottomLeft", [CIVector vectorWithX:155 Y:153], nil]; CIImage *outputImage = [filter outputImage]; CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; UIImage *transformedImage = [UIImage imageWithCGImage:cgimg]; [self setImage:transformedImage]; CGImageRelease(cgimg); 

Следует отметить и другие важные моменты:

  • Мой UIImageView (75pts x 115 pts) уже инициализирован с помощью awakeFromNib и уже имеет связанное с ним изображение (151px x 235px).

  • Вышеупомянутый код реализуется в UIImageView - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event . Надеюсь, что я смогу настроить перспективу изображения на основе экранных координат, поэтому он выглядит так, как изображение перемещается в трехмерном пространстве.

  • Этот код предназначен для iPhone-приложения.

Опять же, вопрос, который, я думаю, я спрашиваю, это то, что делают различные векторы параметров, но я могу задавать неправильный вопрос.

Следующая публикация очень похожа, но спрашивает, почему его образ исчезает, а не как использовать CIVectors для CIPerspectiveTransform. Он также получил очень мало сцепления, возможно, потому что он слишком общий: как я могу использовать фильтр CIPerspectiveTransform

Когда я прокомментировал связанный вопрос, CIPerspectiveTransform недоступен в реализации iOS Core Image с iOS 5.1 . Вот почему вы и другой искатель не видели никакого изображения в результате, потому что, скорее всего, ваш CIFilter был нулевым.

Если вы просто хотите реализовать форму перспективы на изображении, есть два разных быстрых способа сделать это на iOS, как я опишу в этом ответе . Один из них – просто использовать правильный тип CATransform3D на уровне UIImageView, но это полезно только для отображения, а не для настройки изображения.

Второй способ – манипулировать изображением с использованием соответствующей матрицы трехмерного преобразования в OpenGL ES. Как я указываю в вышеприведенном ответе, у меня есть среда с открытым исходным кодом, которая обертывает все это, и в примере FilterShowcase есть пример применения перспективы для входящего видео. Вы можете легко поменять видео вход с вашим изображением и захватить изображение из него после применения эффекта перспективы.

  • IBOutlet - это нуль при использовании пользовательских табличных представлений в раскадровке
  • Сканер штрих-кода в iOS
  • Когда использовать NSNotificationCenter
  • Как перевернуть UIView вокруг оси x, одновременно переключая подпункты
  • Установка ключаWindow rootViewController, не работающего в iOS8
  • AVFoundation получить альбомное изображение песни
  • Когда следует применять Runloop к моей программе и почему?
  • Цель C: Проблема утечки памяти в методе класса
  • отрегулируйте углы и обрезайте изображение openCV
  • Лучшие практики IBOutlet
  • Покупка нескольких расходных материалов за раз
  • Давайте будем гением компьютера.