OpenCV将彩色图像转化为灰色图像

OpenCV将彩色图像转化为灰色图像

很多图像识别任务只需要输入灰度图像就可以了,例如猫狗等与颜色相关度不大的分类任务,而在红绿灯识别中则必须使用彩色图像,总之在实际工作中考虑到成本及运算速度,应尽可能考虑灰度图像。灰度图有如下几点好处

  1. 简化处理。灰度图只含有亮度信息,因此在图像处理中相比彩色图像更容易处理
  2. 突出纹理和结构。灰度图像更加突出图像的纹理和结构,这在深度学习中非常有用
  3. 更小的存储空间。灰度图像只需要存储一个通道,而彩色图像需要存储三个通道。

将RGB格式转化为灰度图公式

G r a y = 0.3 R + 0.59 G + 0.11 B Gray = 0.3R + 0.59G + 0.11B Gray=0.3R+0.59G+0.11B

如下代码可实现从RGB彩色图像到灰度图像的转换:

img_BGR = cv2.imread('./img.jpg')
img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)

img_gray = cv2.cvtColor(img_RGB, cv2.COLOR_RGB2GRAY)
cv2.imshow('img_gray', img_gray)
cv2.waitKey()
cv2.destroyAllWindows()

手动实现可以参考如下代码:

h, w, c = img_RGB.shape
img_gray = np.zeros([h, w, 1], img_RGB.dtype)      # 先生成h*w*1的img_gray,赋值后再reshape成h*w
img_gray[:, :, 0] = img_RGB[:, :, 0]*0.3 + img_RGB[:, :, 0]*0.59 + img_RGB[:, :, 0]*0.11   # h*w*1
img_gray = img_gray.reshape([h,w])                #h*w
cv2.imshow('img_gray', img_gray)
cv2.waitKey()
cv2.destroyAllWindows()

以上两段代码会显示同一幅灰度图
请添加图片描述

同时要注意灰度图和二值图像的区别,二值图像只含黑白两种颜色,像素值只有0和255两种,而灰度图像素值在0-255区间

灰度图转二值图像仅需一行代码:img_binary = np.where(img_gray >= 123.0, 255.0, 0.0)

自己手动实现可以参考如下代码:

h, w = img_gray.shape
img_binary = np.zeros([h, w], dtype=img_gray.dtype)
img_binary
for i in range(h):
    for j in range(w):
        if img_gray[i, j] >= 123:
            img_binary[i, j] = 255
        else:
            img_binary[i, j] = 0
cv2.imshow('img_binary', img_binary)
cv2.waitKey()
cv2.destroyAllWindows()

效果如下所示

请添加图片描述

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值