Подтвердить что ты не робот

Обрезка UIImage, такая как camscanner

Я застрял в своей функции приложения. Я хочу, чтобы функция обрезки была похожа на Cam Scanner Cropping. Экран CAM-SCANNER:  Я создал подобный вид урожая.

enter image description here

enter image description here

Я получил CGPoint из четырех углов. Но как я могу получить обрезанное изображение в наклоне.

Пожалуйста, предоставьте мне несколько предложений, если это возможно.

4b9b3361

Ответ 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.

Надеюсь, что это может дать больше понимания вашей проблеме...