精华内容
下载资源
问答
  • 要将图片转换为灰度图只需要根据各像素的RGB值计算出对应的灰度值即可。那么问题来了灰度值该怎么计算呢? 方法有好几种,有取直接取G的值的,也有取RGB平均值的,更为常用的是加权平均法,也就是R、G、B的权重不...

     

    原文链接:https://www.fearlazy.com/post/283.html

     

    灰度图没有彩色,它的RGB色彩分量全相等,如(100,100,100)和(200,200,200),值越大越亮。

    要将图片转换为灰度图只需要根据各像素的RGB值计算出对应的灰度值即可。那么问题来了灰度值该怎么计算呢?

    方法有好几种,有取直接取G的值的,也有取RGB平均值的,更为常用的是加权平均法,也就是R、G、B的权重不一样:

    Gray = R*0.3 + G*0.59 + B*0.11

     

    测试一下:

    1.准备一种图片:

    2. 测试代码:

    代码很容易理解,循环获取图片的每一个像素的颜色值,再根据公式计算出灰度值,然后将灰色设置到对应的图片对象的相同位置上,最后保存图片即可。

    QImage::pixelColor用于获取像素颜色,返回值是QColor对象。 QImage::setPixelColor用于设置像素颜色,参数是位置(x,y)和QColor对象。

     

    3. 转换后的图像

     

     

    其实还有一种更简单的方法,就是将图片的格式转换为 QImage::Format_Grayscale8

    转换后的效果:

    特别说明:


    若后续发现文章中的错误或者对文章内容补充将只在我的个人博客中进行更新。我的博客主要记录编程中学到的知识、踩过的坑以及一些莫名其妙的想法。

    欢迎来踩我的个人博客: fearlazy。

    
     
    展开全文
  • 256256 OpenCV可以将彩色图转换成灰度图,这不难理解。但是OpenCV能将灰度图转换成彩色...图1 lena_gray图2 lena_rgb首先看看彩色图是怎么转换灰度图的,先读入照片import cv2 import numpy as np img_rgb = cv2....

    5a05055b08cef4178c80071cf512b541.png

    256256 OpenCV可以将彩色图转换成灰度图,这不难理解。但是OpenCV能将灰度图转换成彩色图,这也太厉害了吧。想象一下,将图1中的灰度图输入进去,出来的竟然是图2这种的彩色图,也太不可思议了,可事实是我想多了。

    4bd48a284c7bc4908e22d6ab44bc5382.png
    图1 lena_gray

    be3567e5c4a047e6c3f7c199ce783401.png
    图2 lena_rgb

    首先看看彩色图是怎么转换成灰度图的,先读入照片

    import cv2
    import numpy as np
    img_rgb = cv2.imread(r'..imagelena_rgb.jpg')

    这里采用了三种方式将RGB图像装换成灰度图。第一种是根据公式GRAY=0.3*R+0.59*G+0.11*B:

    #第一种 GRAY=0.3*R+0.59*G+0.11*B
    

    效果如下:

    4bd48a284c7bc4908e22d6ab44bc5382.png

    第二种是对每个通道求均值:

    #第二种  GRAY=(R+G+B)/3
    img_gray2 = (img_rgb[:,:,0] + img_rgb[:,:,1]  + img_rgb[:,:,2]) / 3
    img_gray2 = img_gray2.astype(np.uint8)

    效果如下:

    ca50da03dc8e35e13b5fa304fb5d55c4.png

    可见效果并不好

    第二种是取每个通道上的最大值:

    #第三种 max(R,G,B)
    img_gray3 = np.zeros((256,256))
    for i in range(0,256):
        for j in range(0,256):
            img_gray3[i][j] = np.max((img_rgb[:,:,0][i][j], img_rgb[:,:,1][i][j], img_rgb[:,:,2][i][j]))
    img_gray3 = img_gray3.astype(np.uint8)

    效果如下:

    c21d47dad45be0d1310ee0d8d8e53c77.png

    可以看出,图片有点偏亮了,毕竟是选取的最大值

    再来看看OpenCV是怎么转换的:

    img_gray4 = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

    效果如下:

    7a34abc87761f21b48c6e7d71d552798.png

    看起来跟第一种GRAY=0.3*R+0.59*G+0.11*B的结果挺像的,来看看是不是这样实现的:

    #两者相减,看值是否为0
    sub = img_gray4 - img_gray
    count, count1 = 0, 0
    for i in range(sub.shape[0]):
        for j in range(sub.shape[1]):
            if(sub[i][j] == 0):
                count += 1
            elif(sub[i][j] == 1):
                count1 += 1

    图片的尺寸为256*256,因此sub也为256*256,共有65536个点,sub中的零值共38599个,值为1的共有26937个,加起来刚好是65536,也验证了OpenCV使用的这种转换方式,可能在计算精度上有点区别。

    接下来就看看OpenCV是怎么讲灰度图转换成彩色图的,首先读入一张灰度图(就是刚刚保存的),注意应设置flags为0,代表输入的是灰度图。

    img_gray = cv2.imread(r'..imagegray4.jpg', flags = 0)

    然后将其转化成彩色图:

    img2 = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR)

    img2显示如下:

    e3b9a63e5c1feba26d81197e2659199a.png

    是的,你没有看错,这就是转化后的彩色图,果然事实跟想象还是有差异的。接下来就分析下为什么是这个样子。先打印img2的shape看看,确保这是彩色图

    print(img2.shape)

    输出(256, 256, 3),可以确定这就是彩色图了。那它是如何转化的呢,我一开始的想法是:这应该是一个查表的操作,灰度图中的0-255每一个值都对应三个(R,G,B)的值,对应关系可以由某个公式计算出来。事实比这个还简单。我将每一个通道的值都跟原始灰度图做差,来看看结果如何。

    sub1 = img2[:, :, 0] - img_gray
    sub2 = img2[:, :, 1] - img_gray
    sub3 = img2[:, :, 2] - img_gray
    #判断sub中的每个值是不是都等于0
    print((sub1 == 0).all())
    print((sub2 == 0).all())
    print((sub3 == 0).all())

    输出的是True True True。很明显OpenCV就是把灰度图复制了三遍,分别赋值R,G,B三个通道。

    那应该怎么理解呢,其实R,G,B三个通道上的值相等时,所呈现的颜色就是灰色(很容易验证),只有亮跟暗的区别,值越大就越亮,越小就越暗。也就是从灰度图中的亮度变成了彩色图中的灰色了。所以使用这个函数将灰度图转换成彩色图时,如果出现的还是黑白图,不要觉得是程序出错了。

    (占个坑)将灰度图转换成五颜六色的彩色图可能需要深度学习来实现了,有机会再写。

    展开全文
  • I have array of shape (height, width, 4), i.e., RGBA format, and I want to convert this to grayscale. The original array has RGB values as 0 and the picture is rendered completely based on the alpha v...

    I have array of shape (height, width, 4), i.e., RGBA format, and I want to convert this to grayscale. The original array has RGB values as 0 and the picture is rendered completely based on the alpha values over a white background, hence the traditional ways of turning this into grayscale fail (e.g., cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY)).

    Source image:

    解决方案

    Assumptions:

    Your image is always black-n-white;

    White is defined as a transparency;

    If these things are true, then you can use the Alpha channel directly:

    import cv2

    import matplotlib.pyplot as plt

    img = cv2.imread('image.png', cv2.IMREAD_UNCHANGED)

    img_gray = 255 - img[:, :, 3]

    plt.imshow(img_gray, cmap='gray', vmin=0, vmax=255)

    plt.show()

    If you could also have colored images, then I would ask you to provide one.

    展开全文
  • DeOldify Quick Start: The easiest way to colorize images using DeOldify (for free!) is here: DeOldify Image Colorization on DeepAI The most advanced version of DeOldify image colorization is available...
  • 我只是想把这个彩色图像转换为黑白,但我不知道该怎么做.我只知道如何获得像素.你能帮助我吗?private BufferedImage image;private int[][]rgbValue;public void setRgbValue(BufferedImage image){int width = ...

    我只是想把这个彩色图像转换为黑白,但我不知道该怎么做.我只知道如何获得像素.你能帮助我吗?

    private BufferedImage image;

    private int[][]rgbValue;

    public void setRgbValue(BufferedImage image){

    int width = image.getWidth();

    int height = image.getHeight();

    rgbValue = new int[width*height][3];

    int counter = 0;

    for(int i=0 ; i

    for(int j=0 ; j

    int color = image.getRGB(i, j);

    int red = (color & 0x00ff0000) >> 16;

    int green = (color & 0x0000ff00) >> 8;

    int blue = (color & 0x000000ff);

    rgbValue[counter][0] = red;

    rgbValue[counter][1] = green;

    rgbValue[counter][2] = blue;

    counter++;

    }

    }

    }

    如何将其与此代码结合使用?

    temp = red;

    red = green;

    green = blue;

    blue = temp;

    temp = 0;

    rgb[i] = ((red << 16)) + ((green << 8 )) + (blue );

    if(rgb[i] <= 0x670000){

    rgb[i] = 0x000000;

    } else {

    rgb[i] = 0xffffff;

    }

    展开全文
  • 我也知道计算机看图片是将它们当成数组,但是一直搞不清楚将一张彩色图转变为灰度图怎么操作的。当然,很多库函数都提供借口,包括OpenCV、PIL等。这里我参考...
  • 匿名用户1级2017-05-16 回答OpenCV 生成 伪彩色图像opencv中没有易用的伪彩色图像生成函数,这里提供一个改造过的函数,利用自定义colorbar 将灰度图像转换成为伪彩色图像,优点在于提供了对于颜色的直观可操控性,...
  • 在处理图像的时候经常是读取图片以后把图片转换为灰度图。作为一个刚入坑的小白,我在这篇博客记录了四种处理的方法。首先导入包:import numpy as npimport cv2import tensorflow as tffrom PIL import Image方法一...
  • 滤镜效果有时需要装彩色图像转换为灰度图像 首先要明白灰度图像是怎么来的,灰度图就是在只有一个明暗度来表示颜色。黑白电视机的时候,表示颜色并不是我们常见RGB,而是YUV,基中Y就是明暗度。RGB转换为YUV有个公式...
  • 我得到了图片转换的灰度图,现在想把它转换为G代码利用cnc系统识别并控制电机,不知道转G代码的源程序怎么
  • 2.2 结合这几种方法的优缺点和我们的需要,选择加权平均法作为处理彩色图像为灰度图像的方法。加权平均 公式:I(x,y) = 0.3 * I_R(x,y) +0.59 * I_G(x,y)+ 0.11 * I_B(x,y)几个加权系数0.3,0.59,0.1...
  • 值得一提的是,这个二值化是对每一层的颜色单独二值化,如果想要实现阈值效果,可以直接使用阈值功能或者转化为灰度图之后再使用对话框内的二值化,效果是一样的。 除此之外还有一个边缘提取功能,就是形态学处理中...
  • 图像处理之特殊灰度算法技巧

    万次阅读 多人点赞 2012-03-25 16:23:52
    介绍几种特殊的灰度算法滤镜,将彩色图像转换为灰度图像。其中涉及到的有基于阈值的 像二值化,弗洛伊德.斯坦德伯格抖动算法,基于阈值的部分灰度化   基础知识- 怎么把RGB转换为单色的[0 ~256]之间的灰度,最...
  • 如果我们将图像转换为灰度图像,我们将只有1个通道,即每个像素的密度,但是我们该怎么做呢? 有几种方法: 平均方法:RGB通道的平均值,这不是我第一次使用此方法将RGB图像完全转换为灰度的有效
  • 图像处理------特殊灰度算法技巧

    千次阅读 2015-07-24 09:53:11
    介绍几种特殊的灰度算法滤镜,将彩色图像转换为灰度图像。其中涉及到的有基于阈值的图像二值化,弗洛伊德.斯坦德伯格抖动算法,基于阈值的部分灰度化 基础知识- 怎么把RGB转换为单色的[0 ~256]之间的灰度,最常用...
  • JPEG格式图片转PLT格式雕刻输出:方法一:1.JPEG格式图片用PS打开,先把图片转灰度(图像——模式——灰度),再转位图,输出(O):300,使用(U):50%阀值(图像—模式—位图),存储文件PSD或TIFF。2.打开Adobe...
  • 介绍几种特殊的灰度算法滤镜,将彩色图像转换为灰度图像。其中涉及到的有基于阈值的图像二值化,弗洛伊德.斯坦德伯格抖动算法,基于阈值的部分灰度化基础知识-怎么把RGB转换为单色的[0 ~256]之间的灰度,最常用的...
  • 颜色空间转换使用cv2.cvtColor(input_image ,flag),flag为转换类型常用的转换类型有:BGR和灰度图转换使用 cv2.COLOR_BGR2GRAYBGR和HSV的转换使用 cv2.COLOR_BGR2HSVimg_gray = cv2.cvtColor(img, cv2.COLOR_BGR...
  • 今天给大家介绍一个 Python 的骚操作,将图片转化字符画,又是一个装逼的好技巧,...问题来了,我们是要转换一张彩色的图片,这么多的颜色,要怎么对应到单色的字符画上去?这里就要介绍灰度值的概念了。灰度值...
  • 假设a是一个灰度图的mat形式(当然实际的size肯定比这大,我只是举例子),如果需要对这个矩阵的像素进行加减处理,很可能会产生溢出,如用matlab试验a(1,1)-60,答案0.那么怎么才能防止这种情况呢? 一种情况是...
  • python 切割pdf图片 一行行,再把一行切成一个个python 切割pdf图片 一行行,再把一行切成一个个#-*- coding:utf-8 -*-import sysreload(sys)sys....并把图像转换为灰度图像并显示img = cv2.imread("612.pn...
  • 在OpenCV里实现向图像添加高斯噪声

    千次阅读 2019-11-10 20:14:12
    下面就来解决这个问题,这里使用np.random.normal函数来生成高斯噪声,然后再添加到归一化的图像里,最后再转换为255的灰度值进行显示。 这个例子的代码如下: #python 3.7.4,opencv4.1 #蔡军生 ...
  • I=imread(['D:\360Downloads\A.jpg']);figure(1),imshow(I);... %将真彩色图像转换为灰度图像figure(2),subplot(1,2,1),imshow(I1);title('灰度图');figure(2),subplot(1,2,2),imhist(I1);title('灰度图直方图')...
  • 如题,但我觉得这个东西并不怎么好,不知道你们有什么好的办法,如下是两种方法 ... # 转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # s为像素和初值为0,hash_str为hash值初值为'' s = 0 h

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

怎么转换为灰度图