Обработка изображений с помощью cimg C++

Я использую С++, и у меня есть проект, над которым я работаю, который требует, чтобы мы удалили дубль в команде кодирования или декодирования вместе с «image.jpg», «новым именем изображения» и «ASCII_file.txt», который содержит ascii-символы. Что нам нужно сделать, так это удалить наименее значащий бит пикселя и заменить его значением ASCII до тех пор, пока не останется символов ASCII. Что мне нужно знать, так это как получить доступ к наименее значимому биту с помощью библиотеки cimg, я огляделся, но не нашел способа сделать это. Конечно, есть этот http://cimg.eu/reference/group__cimg__storage.html, но он есть не подскажите хороший способ найти конец просто "...". Мой профессор сказал мне использовать cimg или imagemagick для C++, и cimg выглядел самым простым. Мне действительно нужно знать, как это сделать, любая помощь приветствуется. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.

P.S. Я использую визуальную студию 2015, чтобы запрограммировать это.


person zyphon7    schedule 06.12.2015    source источник


Ответы (1)


CImg сохраняет изображение как R-красный, G-зеленый, B-синий, A-альфа. Давайте начнем, чтобы ваше изображение было загружено в память:

#define cimg_use_jpeg 1

CImg<unsigned char> *image = new CImg<unsigned char>("image.jpg");

//Now we will get pointers to each channel
unsigned char * ptr_r = image.data(0, 0, 0, 0);//red pixels array 1'st row
unsigned char * ptr_g = image.data(0, 0, 0, 1);//green pixels array 1'st row
unsigned char * ptr_b = image.data(0, 0, 0, 2);//blue pixels array 1'st row
unsigned char * ptr_a = image.data(0, 0, 0, 3);//alpha array 1'st row

//Iterating over image buffer

//image rows
for(int row = 0; row < image->height(); row++) {
  unsigned char * ptr_r = image.data(0, row, 0, 0);//red pixels array 1'st row
  unsigned char * ptr_g = image.data(0, row, 0, 1);//green pixels array 1'st row
  unsigned char * ptr_b = image.data(0, row, 0, 2);//blue pixels array 1'st row
  unsigned char * ptr_a = image.data(0, row, 0, 3);//alpha array 1'st row

  for(int col = 0; col < image->width(); col++) {
      //rewriting all r chanel values with 255
      *(ptr_r) = 255;
       ptr_r++;
      //this is equal
      ptr_r[col] = 255;
  }
}

Что нам нужно сделать, так это удалить младший значащий бит пикселя.

Я не уверен, что вы имеете в виду, но мой пример должен вам помочь.

person Nazar Sakharenko    schedule 10.12.2015