簡體   English   中英

使用Cimg C ++進行圖像處理

[英]Image manipulation with cimg C++

我正在使用c ++,我有一個正在執行的項目,該項目要求我們刪除編碼或解碼命令以及“ image.jpg”,“新圖像名稱”和“ ASCII_file.txt”,其中包含ASCII字符。 我們需要做的是刪除像素的最低有效位,並將其替換為ASCII值,直到不再有ASCII字符為止。 我需要知道的是如何使用cimg庫訪問最低有效位,盡管我環顧四周,但沒有找到任何方法。 當然有這個http://cimg.eu/reference/group__cimg__storage.html,但是它並不能告訴我找到結尾的好方法,只是一個“ ...”。 我的校長告訴我,對於c + +使用cimg或imagemagick,cimg看起來最簡單。 我真的需要知道如何完成這項工作,感謝您的幫助。 如果您還有其他問題,請隨時提問。

PS Im使用Visual Studio 2015對此進行編程。

CImg將圖像存儲為R-紅色,G-綠色,B-藍色,A-alpha。 讓我們開始吧,讓您將圖像加載到內存中:

#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;
  }
}

我們需要做的是去除像素的最低有效位

我不確定您的意思,但是我的示例可以為您提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM