Работа с изображениями на языке C++ или C



Во-первых, я новичок. Ладно?



Я прочитал соответствующие ответы и вопросы, но, пожалуйста, помогите мне с этой проблемой:



Как открыть файл JPEG-изображения на языке C++, преобразовать его в изображение в оттенках серого, получить его гистограмму, изменить размер на меньшее изображение, обрезать определенную область или показать определенную область?



Для этих задач C или C++ быстрее в целом?



Какие библиотеки самые простые и быстрые? Время выполнения очень важный.



Спасибо.

2174   5  

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

    Ничего не найдено.