Чтение / манипулирование изображениями в C ++ - PullRequest
0 голосов
/ 07 февраля 2012

Я разочарованный новичок в C ++, который хотел бы выполнить простую задачу: извлечь матрицу пикселей из файла изображения, выполнить некоторое преобразование, а затем вывести измененную матрицу в выбранный мной формат изображения.

Я попробовал libpng, и его API беспорядок и трудно читаемый. Интересно, что некоторые люди говорили, что это лучший вариант для C ++. Я позвонил своему двоюродному брату-разработчику программного обеспечения, и он сказал мне использовать OpenGL. Итак, я немного погуглил и все еще не нашел прямого ответа.

Кажется, что получить простое «int * readPNG (char * path)» слишком много, чтобы спросить, когда подобные Java, Matlab и python включают эти вещи в свои стандартные библиотеки. Это просто смешно! Откуда вы, профессионалы, и какие библиотеки используете?

Также несколько тривиальных вопросов C ++: Есть ли способ организовать классы в иерархии, например, как пакеты используются в Java? Я пробовал фильтры в Visual C ++, но они, кажется, не одно и то же. - Есть ли способ получить легко понятные трассировки стека для сбоев во время выполнения?

Ответы [ 7 ]

1 голос
/ 07 февраля 2012

Я обнаружил, что Библиотека Magick ++ ImageMagick является наиболее полезным инструментом для обработки данных, отформатированных в изображениях.

C ++ имеет пространства имен, такие как Java, но они намного сложнее в использовании и могут только сделать вещи менее читабельными. Что касается трассировки стека, я рекомендую для этого комбинировать существующие ответы на стек. Короче, это не просто.

0 голосов
/ 12 февраля 2012

Это мой ответ на мой собственный вопрос:

Некоторые из предложенных там библиотек имеют проблемы с установкой с Visual Studio 2010, практически не предлагают инструкций по установке с Visual Studio (например, FreeImage),или просто смехотворно грязный API (например, libpng).

Если вы новичок в C / C ++, пожалуйста, будьте осторожны с выбором библиотеки.Даже если существуют технические форумы, на которых есть гуру, которые знают все ответы, вы, скорее всего, проведете свои собственные дни, экспериментируя и подбирая подсказки, на которые опытные добровольцы могли бы легко ответить в 2 предложениях (если они обеспокоены).

Теперь, что работает для меня, это библиотека изображений OpenCV (http://opencv.willowgarage.com/),, которая была представлена ​​Mister daerty0153 там. Когда вы заходите на сайт, не загружайте суперпак с sourceforge. Вместо этого читайтеинструкции по установке (http://opencv.willowgarage.com/wiki/InstallGuide) и выберите, какую платформу вы используете.

В моем случае я использую Visual Studio 2010 в качестве своей IDE, и поэтому это фактическая подстраница, которая имеет отношение: http://opencv.willowgarage.com/wiki/VisualC%2B%2B

Одна проблема, с которой я столкнулся, - это позволить VS2010 распознавать файлы .dll, и ее нельзя исправить, следуя этим инструкциям. Моим решением было скопировать их все в папку моего проекта, и это решило все проблемы. Некоторые предположили, что это ошибка VS 2010.

Надеюсь, это поможет другим, страдающим от такой же ситуации.

0 голосов
/ 07 февраля 2012

Я рекомендую DevIL (ранее известный как OpenIL).Он поддерживает чтение и запись для 17 форматов и поддерживает множество других функций только для чтения.

0 голосов
/ 07 февраля 2012

1) Попробуйте freeImage - очень прост в использовании и документация читаема. freeimage site

2) для трассировки стека: с какой средой вы работаете? В Visual Studio есть окно стека (Debug / Windows / Call Stack - Alt 7), Вы также можете использовать DebugView и OutputDebugString - на самом деле не отслеживает стек, но может быть очень полезен при отладке. .

0 голосов
/ 07 февраля 2012

Я бы предложил Magick ++ , API C ++ для ImageMagick .

Что касается пакетов: вы можете использовать пространства имен, но это не сравнимо с пакетами Java(нет доступа на уровне пакета и т. д.).В основном это то, что они называют: средство для организации имен .

Следы стека не являются тривиальными в C ++.И нет никакого независимого от платформы способа их реализации, о котором я знаю.

Если вам нужны эти функции, я просто задаюсь вопросом, почему вы не придерживаетесь Java, Python или подобных?...

0 голосов
/ 07 февраля 2012

Я предлагаю вам улучшить свой Google-фу. Для C ++ существует множество библиотек обработки изображений, в том числе Boost Generic Image Library , которая максимально приближена к стандартной. Если у вас нет установленной программы Boost и библиотеки с минимальной суетой, вы всегда можете попробовать The CImg Library .

Что касается других ваших вопросов (например, трассировки стека), вам нужно будет задать отдельные вопросы.

0 голосов
/ 07 февраля 2012

Попробуйте OpenCV . Это библиотека обработки изображений с очень простыми функциями для редактирования и сохранения изображений. Это послужит вашей цели. Он также поставляется с очень элегантной документацией.

...