У вас есть несколько вариантов, но я пройду через них, начиная с самого легкого и наименее интегрированного с OSX и постепенно интегрируясь с OSX.
Самый простой вариант
Лично я, если был умысел на обработке полутоновых изображений, я хотел бы написать свое программное обеспечение для использования портативного формата Netpbm в Greymap (PGM), как это очень проще читать и писать и легко взаимозаменяемы с другими форматами. Нет сжатия, DCT, квантования, цветовых пространств, данных EXIF - просто ваши данные с простым заголовком. Документация: here.
В основном файл PGM выглядит следующим образом:
P2
# Shows the word "FEEP" (example from Netpbm man page on PGM)
24 7
15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Вы можете увидеть P2
говорит, что это в ASCII (легко читать) и greymap. Затем следующая строка говорит, что ширина 24 пикселей на 7 высот и самый яркий пиксель 15. Очень просто читать и писать. Вы можете изменить P2
на P5
и написать все после MAXVAL в двоичном формате, чтобы сэкономить место.
Теперь вы можете просто использовать ImageMagick за пределами вашей программы для преобразования JPEG, PNG, GIF, файлы TIFF в PGM, как это - без необходимости каких-либо при компоновке или библиотек или компилятора переключатели:
convert input.png output.pgm
convert input.jpg output.pgm
Точно так же, если у вас есть закончил обработку и создал в результате выходной файл в формате PGM вы можете преобразовать его в формат JPEG или TIFF, просто реверсивные параметры:
convert result.pgm result.jpg
Лично я бы установить ImageMagick с помощью homebrew
. Вы переходите к the homebrew website и копируете однострочный вкладыш и вставляете его в терминал для установки homebrew
. После этого вы можете установить ImageMagick с:
brew install imagemagick
и, кстати, если вы хотите попробовать другие предложения здесь, используя OpenCV, то это так же просто, как
brew search opencv
brew install homebrew/science/opencv
Если вы хотите небольшой, автономный пример небольшого проекта OpenCV, посмотрим на мой ответ на другой вопрос here - вы также можете увидеть, как такой проект возможен из командной строки с ImageMagick в моем другом answer по тому же вопросу.
Magick ++
Если вы решили установить ImageMagick с помощью homebrew
вы получите Magick ++, который позволит вам написать свои алгоритмы в C и C++. Он довольно прост в использовании и может работать на любых платформах, включая OSX, Windows и Linux, поэтому он привлекателен с этой точки зрения. Он также имеет множество функций обработки изображений, встроенных в него. Существует хороший учебник here и документация here.
Ваш код будет выглядеть примерно так:
// Read an image from URL
Image url_image("http://www.serverName.com/image.gif");
// Read image from local filesystem
Image local_file_image("my_image.gif");
// Modify image
Pixels my_pixel_cache(my_image);
PixelPacket* pixels;
// define the view area that will be accessed via the image pixel cache
int start_x = 10, start_y = 20, size_x = 200, size_y = 100;
// return a pointer to the pixels of the defined pixel cache
pixels = my_pixel_cache.get(start_x, start_y, size_x, size_y);
// set the color of the first pixel from the pixel cache to black (x=10, y=20 on my_image)
*pixels = Color("black");
// set to green the pixel 200 from the pixel cache:
// this pixel is located at x=0, y=1 in the pixel cache (x=10, y=21 on my_image)
*(pixels+200) = Color("green");
// now that the operations on my_pixel_cache have been finalized
// ensure that the pixel cache is transferred back to my_image
my_pixel_cache.sync();
// Save results as BMP file
image.write(“result.bmp”);
компании Apple OSX Option
Другой ПОЛНОСТЬЮ ОТДЕЛЬНАЯ вариантом было бы использовать инструменты, которые Apple, предназначенных для работы с изображениями - они быстро и просты в использовании, но не будут работать в Linux или Windows. Так, например, если вы хотите
а) загрузите PNG-файл (или TIFF или JPEG, просто измените расширение)
б) сохранить его в виде файла JPEG
с) процесса отдельные пиксели
// Load a PNG file
NSImage * strImage = [[NSImage alloc]initWithContentsOfFile:@"/Users/mark/Desktop/input.png"];
// Save NSImage as JPG
NSData *imageData = [strImage TIFFRepresentation];
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:imageData];
NSDictionary *imageProps = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:1.0] forKey:NSImageCompressionFactor];
imageData = [imageRep representationUsingType:NSJPEGFileType properties:imageProps];
[imageData writeToFile:@"/Users/Mark/Desktop/result.jpg" atomically:YES];
// Access individual pixels
int w=imageRep.pixelsWide;
int h=imageRep.pixelsHigh;
int bps=imageRep.bitsPerSample;
printf("Dimensions: %dx%d\n",w,h);
printf("bps: %d\n",bps);
// Get a pointer to the uncompressed, unencoded pixel data
unsigned char *pixelData = [imageRep bitmapData];
for(int j=0;j<10;j++){
printf("Pixel %d: %d\n",j,pixelData[j]);
}
конечно, вы можете взять код выше и легко сделать небольшую утилиту, которая преобразует любой формат файла для PGM, а затем вы могли бы пойти с моим первым предложением использовать формат PGM и не нужно будет для установки ImageMagick - хотя на самом деле он мертв просто с homebrew
.
Помните, что вы можете комбинировать Objective-C (как в последнем примере) с C++ и C в одном проекте, используя clang (компилятор Apple), чтобы вы могли перейти на C, как вы указываете в своем вопросе, с помощью любой из приведенных выше примеров.
Если вы новичок в разработке на OSX, вам нужно зайти в AppStore и бесплатно загрузить Apple Xcode
, чтобы получить компилятор и библиотеки. Тогда вы должны сделать
xcode-select --install
для установки инструментов командной строки, если вы хотите, чтобы сделать традиционное развитие с помощью Makefiles и командной строки компиляции/ссылок.
Намерение изучить обработку изображений или получить обработку некоторых изображений? –
Вы хотите, чтобы ваше программное обеспечение можно было использовать только на Mac или на многих платформах? –
В чем проблема с установкой ОС X? – emcconville