Обрезка UIImage, такая как camscanner
Я застрял в своей функции приложения. Я хочу, чтобы функция обрезки была похожа на Cam Scanner Cropping.
Экран CAM-SCANNER:
Я создал подобный вид урожая.
![enter image description here]()
![enter image description here]()
Я получил CGPoint из четырех углов.
Но как я могу получить обрезанное изображение в наклоне.
Пожалуйста, предоставьте мне несколько предложений, если это возможно.
Ответы
Ответ 1
Это проблема преобразования перспективы. В этом случае они рисуют трехмерную проекцию в двумерной плоскости.
Так как первое изображение имеет углы выбора в форме четырехугольника, и когда вы трансформируете его в прямоугольной форме, вам нужно будет добавить больше информации о пикселях (interpolation) или удалить несколько пикселей.
Итак, теперь актуальной проблемой является добавление дополнительной информации о пикселях в обрезанное изображение и проецирование ее на создание второго изображения. Его можно реализовать по-разному:
< > вы можете реализовать его самостоятельно, применяя матрицу перспективной трансформации с интерполяцией.
< > вы можете использовать OpenGL.
< > вы можете использовать OpenCV.
.. и есть еще много способов реализовать его.
Я решил эту проблему с помощью OpenCV. Следующие функции в OpenCV помогут вам в этом.
Первая функция будет вычислять матрицу преобразования, используя координаты проекции источника и цели. В вашем случае массив src будет иметь значения из CGPoint для всех углов. И dest будут иметь прямоугольные проекционные точки, например {(0,0) (200,0) (200,150) (0,150)}.
Как только вы получите матрицу трансформации, вам нужно будет передать ее второй функции. вы можете посетить thread.
В библиотеке OpenCV может быть немного альтернатив, но в ней есть хорошая коллекция алгоритмов обработки изображений.
Приложение iOS с библиотекой opencv доступно на eosgarden.
Ответ 2
Я вижу две возможности. Первый - вычислить матрицу преобразования, которая наклонена на изображение, и установить ее в свойстве CATransform3D вашего уровня представления.
Это было бы просто, если бы вы знали, как сформировать матрицу преобразования, которая растягивала. Я никогда не узнавал, как создавать матрицы преобразования, которые растягивают или искажают изображения, поэтому я не могу помочь. Я бы предложил матрицы преобразования googling и растяжения/перекоса.
Другим способом было бы превратить часть изображения, которое вы обрезаете, в текстуру OpenGL и отобразить текстуру на свой вывод. Фактической частью рисования текстур было бы легко, но есть около 1000 килограммов установки OpenGL, и многому чему научиться, чтобы вообще что-либо сделать. Если вы хотите продолжить этот маршрут, я бы предложил искать простые примеры 2D-текстур, используя новый iOS 5 GLKit.
Ответ 3
Используя код, указанный в ссылке: http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/
Вместо использования CGRect и CGContextClipToRect Попробуйте использовать CGContextEOClip ИЛИ CGContextClosePath
Хотя я havnt пробовал это... Но я пробовал рисовать замкнутый путь, используя CGContextClosePath на событиях TouchesBegan и TouchesMoved и TouchesEnd.
Надеюсь, что это может дать больше понимания вашей проблеме...