我使用以下公式将RGB图像转换为灰度图像,但它似乎无法正常工作。
gray_pixel = (r_pixel + g_pixel + b_pixel) / 3
答案 0 :(得分:2)
您可能遇到问题,因为b_pixel
,g_pixel
和uint8
是整数,因此当您尝试取三者的平均值时,您会得到不正确的结果,因为任何添加或者这些数字的划分也强制为uint8(255) + uint8(255) + uint8(255)
% 255
,这意味着如果红色,绿色和蓝色全部为255,则无法正确地将值相加。
gray_pixel = (double(r_pixel) + double(g_pixel) + double(b_pixel)) / 3;
您需要先将它们全部转换为浮点数。
uint8
如果您确实需要uint8
灰度图像,则可以将结果转换为gray_pixel = uint8(gray_pixel);
grayim = rgb2gray(img);
话虽这么说,但这并不是从RGB图像创建灰度图像的最佳方法。使用MATLAB的最简单方法是使用内置函数example here
gray_pixel = 0.2989 * r_pixel + 0.5870 * g_pixel + 0.1140 * b_pixel;
他们使用的实际配方是rgb2gray
set wsSh = CreateObject("WScript.Shell")
Folder = wsSh.SpecialFolders.Item("AppData") & "\Microsoft\Internet Explorer\Quick Launch"
Set myShortcut = wsSh.CreateShortcut(Folder & "\1.lnk")
MyShortcut.IconLocation = "C:\Users\Username\Desktop\2.dll, 1"
myShortcut.Save
答案 1 :(得分:0)
除了上面使用rgb2gray的建议之外,我想说你的公式有问题,这是一个不适合uint8的总和,因为它以255为界。你可以先将数字转换为uint16,计算平均值和然后将结果转换为uint8。
gray_pixel = uint8([uint16(r_pixel) + uint16(g_pixel) + uint16(b_pixel)] / 3)