請問各位高手 圖片灰階問題

小弟把圖片改成灰階後 RGB的值皆相同,但是不是應該是(ARGB),前面這個亮度會改變嗎??取他變化大小吧!! 但是我看前面A的值卻都是255,怎會這樣阿!?

已更新項目:

小弟是使用C#的 color函數

2 個已更新項目:

請問大大,那小弟在做灰階圖片的變化,哪個涵數是他的灰階顏色變化

3 個已更新項目:

char image[512][512][3];

FILE* fp = fopen("a.bin","rb"); // 開檔

fread( &image, 512*512*3, sizeof(char), fp ); //

fclose( fp ); // 關檔

cout << image[0][0][1] ;

小弟該如何得知 位置0,0 的r 的數值 顯示0~255

4 個已更新項目:

不是點bin,是jpg或bmp..

5 個已更新項目:

恩!要得知image的值 轉成0~255 顯示,請問我該怎麼做!?

6 個已更新項目:

帕拉提斯大大:

char image[512][512][3];//

char image[512][512][3];

FILE* fp = fopen("xxx.bmp","rb"); // 開檔

fread( &image, 512*512*3, sizeof(char), fp ); //

fclose( fp ); // 關檔

請問我該如何去轉換顯示 r、g、b 在image[x][y][0] image[x][y][1] image[x][y][2]

顯示的數值為0~255。

5 個解答

評分
  • 卸貨
    Lv 5
    8 年前
    最佳解答

    A,是 Alpha Channel,不是亮度而是透明度,因此理當不改變。

    2013-01-12 16:51:20 補充:

    1. 我也不知道那個函式可以計算灰階變化,我通常都自己算。

    2. 提醒您,通常影像資料不會在檔案的開頭,排放順序也不一定,你會需要查閱個別影像檔案格式的文件。

    3. 對於 JPEG 影像你還會需要把資料解壓縮才能還原。至於解壓縮的方法我也不會,我都用 libjpeg 搞定。

    2013-01-15 00:49:19 補充:

    評估你的狀況,我覺得你直接找個現成的程式庫來用好了。個人推薦 OpenCV,一個 cvLoadImage 就搞定圖片的讀取,之後的處理也頗方便。

  • 8 年前

    我靠寫程式賺超過30年,

    參加過幾十次的比賽,沒有沒拿前三名的。

    曾在 ACM 排名世界第33的資工所攻讀繪圖博士。

    並在 IBM 及 某世界在那領域賣量排名第二、準度第一的軟體公司做過。

    在那軟體公司,我負責的就是繪圖。

    並在上線 28 週內,做出27項(以上)的加速效果。(加速外還做了別的)

    加速成功的加速比例是:

     10倍以下,約5件。

     多數在 20出頭倍。

     剩的有 50, 1.5K ~ 70K 倍的。

    = = = =

    2013-04-08 07:45:08 補充:

    上述不是為了炫耀,只是想增加下述看法的可參考度。

    你了解 Compiler 原理嗎?

    那為何用 Compiler 編寫你的程式?

    JPG、GIF、PNG、灰階等,不過是入門的東西。

    如果被它們卡住,怎麼走後面的路?

    BMP(中的簡單規格)、灰階,簡單又入門,實做一下無妨。

    JPG, GIF, PNG, TIF 等,就省省吧!有現成的就用!

    除非你要鑽研檔案規格!

     寫過3 款基本的壓縮/解壓縮的程。

     學過 JPG 和 GIF 的原理,也用 lib 讀寫過它們。

    但,我不曾寫過 JPG 及 GIF 的讀寫程式!都是用 lib。

    希望不要被檔案規格困死。

    祝你成就在我之上。

  • 8 年前

    有!!我有看 BMP FILE FORMAT 、http://en.wikipedia.org/wiki/Grayscale#Converting_...

    我前幾天以閱讀了,疑惑也解開了!! 謝謝!!

    抱歉~~最近有點忙,所以沒有回答..不是沒有看。

  • Lv 4
    8 年前

    你的問題搜尋BMP FILE FORMAT

    找一些範例你就會懂了

    這不是演算法的問題

    2013-01-14 23:57:49 補充:

    哀,不願意看資料,真的很麻煩也

    你的程式有很大的問題

    你這樣做

    for(i=0;i<512;i++)

    for(j=0;j<512;j++){

    for(k=0;k<3;k++)

    {

    printf("%x ",image[i][j][k]);

    }

    printf("\n");

    system("PAUSE");

    }

    結果會是這樣

    42 4d 3e

    14 c 0.....

    ..........

    這就是圖片的檔案

    你前面一定都跟我一樣

    42是16進位 十進位是66(4*16+2)ANSI=B

    4d則是E,這是識別系統的BE是微軟

  • 您覺得這個回答如何?您可以登入為回答投票。
  • 其威
    Lv 7
    8 年前

    http://en.wikipedia.org/wiki/Grayscale#Converting_...

    基本上你可以跳過上面那兩個 Clinear 與 Csrgb 兩個式子,直接看下面 Y' = ... 的兩個式子。

    PAL 與 NTSC 採用 Y' = 0.299R + 0.587G + 0.114B

    新的 HDTV 採用 Y' = 0.2126R + 0.7152G + 0.0722B

    2013-01-14 15:36:02 補充:

    ...... 不是已經把公式列給你了嗎?

    看你要用哪個標準,假設你用 HDTV 的標準好了,那麼:

    Y' = 0.2126R + 0.7152G + 0.0722B

    你可以四捨五入取整數部分。

還有問題?馬上發問,尋求解答。