opencv-python学习【2】图像处理基础

一.图像的基本表示方法

1.二值图像

  二值图像指的是仅仅包含黑色和白色两种颜色的图像。在计算机中,通过矩阵数组来表示和处理图像,矩阵的每一个位置元素就是一个独立的处理单位,称其为像素点。计算机将白色像素点处理为“1”,黑色像素点处理为“0”,方便后续的操作。由于二值图像只有黑色和白色两种颜色,因此只用一个比特位(0或1)就能表示。

2.灰度图像

  二值图像简单方便,但是只有黑白两种颜色,表示的图像不够细腻,,更多的颜色种类才能表示更细腻的图片。如下图是一幅灰度图像,采用更多地数值 0到255 来表示图像。

  计算机将灰度处理为256个灰度级,用数值区间 [0, 255] 来表示。其中 “0” 表示纯黑色,“255” 表示纯白色,其余的数值表示从纯黑到纯白之间不同级别的灰度。

3.彩色图像

  比起二值图像和灰度图像,彩色图像是更常见的一类图像,能表现更加丰富的细节信息。
  从不同的角度表述颜色,可以得到不同的色彩空间(也称为颜色空间、颜色模式)。而 RGB 色彩空间是我们常用的色彩空间,在 RGB 色彩空间中,存在 R(red,红色)通道、 G(green,绿色)通道、 B(blue,蓝色)通道,每个色彩通道的值都是在 [0, 255] 之间,我们用这三个色彩通道组合来表示彩色颜色。由于每个通道都有 256 种数值,所以可以组合成 256x256x256=16777216 种颜色。下表为常见的几种组合颜色。

RGBRGB颜色
000(0,0,0)纯白
255255255(255,255,255)纯黑
25500(255,0,0)红色
02550(0,255,0)绿色
00255(0,0,255)蓝色
1396919(139,69,19)棕色
114141216(114,141,216)天蓝色

  如下图所示,在彩色图的某个像素点的值为 (256,89,68) ,这个三个值分别对应为 R、G、B 三个通道的值,三个值组合起来形成了我们看到的彩色。(注意在opencv中读取图像后,图像默认会转为BGR格式)

二.图像像素处理

  像素是图像构成的基本单位,通过对数组位置索引的形式可以对图像内的元素进行访问,处理。

三.通道操作

  针对RGB图像,我们可以拆分出 R、G、B 三个通道,先读取原彩色图片img = cv2.imread('dog.jpg')(注意此时的图片为 BGR 通道顺序)。此时 img 为三维矩阵 img.shape = (512,512,3),部分值如下图所示:

1.通道拆分

(1).通过索引拆分

b = img[:, :, 0]	# 获取图像的 B 通道
g = img[:, :, 1]	# 获取图像的 G 通道
r = img[:, :, 2]	# 获取图像的 R 通道

img[:, :, 0] = 1	# 将图像 B 通道的值设为1
img[:, :, 1] = 0	# 将图像 G 通道的值设为0
img[:, :, 2] = 10	# 将图像 R 通道的值设为10

(2).通过函数拆分

b,g,r = cv2.split(img)
###或者写成一下形式###
b = cv2.split(img)[0]	# 获取图像的 B 通道
g = cv2.split(img)[1]	# 获取图像的 G 通道
r = cv2.split(img)[2]	# 获取图像的 R 通道

  此时 b,g,r 都分别为二维矩阵 b.shape = (512,512),部分值如下图所示:

2.通道合并

  通道合并是通道拆分的逆过程,可以将三个通道的灰度图合并来构成一幅彩色图像。

b,g,r = cv2.split(img)
bg_img = cv2.merge([b,g])
rgb_img = cv2.merge([r,g,b])

  此时 bg_img 为三维矩阵 bg.shape =(512, 512, 2),部分值如下图所示:

  此时 rgb_img 为三维矩阵 rgb.shape =(512, 512, 3),部分值如下图所示:

3.获取图像属性

img = cv2.imread('xxx.png')

  • img.shape:如果是彩色图,返回 (行数, 列数, 通道数) 的三元组;如果是灰度图,返回 (行数, 列数) 的二元组
  • img.size:返回图像的像素数目。值为 “行数 x 列数 x 通道数”
  • img.dtype:返回图像的数据类型

示例

import cv2

bgr = cv2.imread('dog.jpg')
print(bgr.shape)
print(type(bgr.shape))
print(bgr.size)
print(bgr.dtype)

gray = cv2.cvtColor(bgr,cv2.COLOR_BGR2GRAY)
print(gray.shape)
print(type(gray.shape))
print(gray.size)
print(gray.dtype)

'''结果如下
(512, 512, 3)
<class 'tuple'>
786432
uint8

(512, 512)
<class 'tuple'>
262144
uint8
'''
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值