Работа с изображениями на языке C++ или C
Во-первых, я новичок. Ладно?
Я прочитал соответствующие ответы и вопросы, но, пожалуйста, помогите мне с этой проблемой:
Как открыть файл JPEG-изображения на языке C++, преобразовать его в изображение в оттенках серого, получить его гистограмму, изменить размер на меньшее изображение, обрезать определенную область или показать определенную область?
Для этих задач C или C++ быстрее в целом?
Какие библиотеки самые простые и быстрые? Время выполнения очень важный.
Спасибо.
5 ответов:
Вот пример использования библиотеки magick.
Программа, которая считывает изображение, обрезает его и записывает в новый файл (обработка исключений необязательна, но настоятельно рекомендуется):
#include <Magick++.h> #include <iostream> using namespace std; using namespace Magick; int main(int argc,char **argv) { // Construct the image object. Seperating image construction from the // the read operation ensures that a failure to read the image file // doesn't render the image object useless. Image image; try { // Read a file into image object image.read( "girl.jpeg" ); // Crop the image to specified size (width, height, xOffset, yOffset) image.crop( Geometry(100,100, 100, 100) ); // Write the image to a file image.write( "x.jpeg" ); } catch( Exception &error_ ) { cout << "Caught exception: " << error_.what() << endl; return 1; } return 0; }
Ну для основных манипуляций с изображениями вы также можете попробовать класс Qt QImage (и другие). Это дает вам базовую функциональность для открытия, масштабирования, изменения размера, обрезки, манипуляций с пикселями и других задач.
В противном случае вы могли бы, как уже было сказано, использовать ImageMagick или OpenCV. OpenCV предоставляет множество примеров с ним для многих задач обработки изображений / распознавания изображений...
Надеюсь, это поможет...
Существует множество хороших библиотек для работы с изображениями на языках Си и Си++, ни одна из которых не превосходит всех остальных. OpenCVВики, Страница проекта имеет большую поддержку для некоторых из этих задач, в то время как ImageMagickВики, Страница проекта хорошо у других. Группа JPEG также имеет свою собственную реализацию функций обработки JPEG. Это, вероятно, хорошие ресурсы для начала; документация API может помочь вам более конкретно как использовать каждый из них.
Что касается того, должны ли библиотеки C или C++ быть быстрее, между ними нет явного победителя. В конце концов, вы всегда можете скомпилировать библиотеку C на языке C++. Тем не менее, библиотеки C++, как правило, немного сложнее подобрать из-за сложности языка, но гораздо проще использовать, как только вы получили хорошее представление о языке. (Я немного предвзято отношусь к C++, поэтому обязательно рассмотрите источник). Я бы рекомендовал идти с любым языком, который вы найдете более легким для задача; ни один из них не является плохим выбором здесь, особенно если важна производительность.
Удачи вам в вашем проекте!
Libgd -это самое простое и легкое решение.
gdImageCreateFromJpeg gdImageCopyMergeGray gdImageCopyResizedО, и это все С.
Если время выполнения действительно важно, то вы должны рассмотреть библиотеку обработки изображений, которая разгружает задание обработки на GPU-чип, например:
Comments