我正在使用下面的公式將RGB圖像轉換爲灰度圖像,但它似乎沒有正常工作。將「uint8 RGB像素」值轉換爲「uint8灰度像素值」的公式是什麼?
gray_pixel = (r_pixel + g_pixel + b_pixel)/3
我正在使用下面的公式將RGB圖像轉換爲灰度圖像,但它似乎沒有正常工作。將「uint8 RGB像素」值轉換爲「uint8灰度像素值」的公式是什麼?
gray_pixel = (r_pixel + g_pixel + b_pixel)/3
你可能有問題,因爲r_pixel
,b_pixel
和g_pixel
是整數,因此,當你嘗試採取三個平均,你得到不正確的結果,因爲這些數字的任何添加或劃分也被迫成爲一個uint8
的意義,你不能正確的值相加在一起,如果紅色,綠色和藍色都是255
uint8(255) + uint8(255) + uint8(255)
% 255
你會想先將它們全部轉換爲浮點數。
gray_pixel = (double(r_pixel) + double(g_pixel) + double(b_pixel))/3;
如果你真的需要一個uint8
灰度圖像,然後你可以把結果作爲uint8
gray_pixel = uint8(gray_pixel);
話雖這麼說,這是不是真的要創建從一個灰度圖像的最佳方式RGB圖像。與MATLAB最簡單的方法是隻使用內置功能rgb2gray
grayim = rgb2gray(img);
至於他們使用的實際製劑爲BT.601
gray_pixel = 0.2989 * r_pixel + 0.5870 * g_pixel + 0.1140 * b_pixel;
在另外的勸告以上使用rgb2gray,我想要說你的公式的問題,那是一個不適合uint8的總和,因爲它以255爲界。你可以先將數字轉換爲uint16,計算平均值,然後將結果轉換爲uint8。
gray_pixel = uint8([uint16(r_pixel) + uint16(g_pixel) + uint16(b_pixel)]/3)
我需要這個值爲單個像素。這似乎工作正常。謝謝。 :) – Rohit