20200317.图像处理基础

图像的表示方法及像素处理

图像是用矩阵进行表示的。

二值图像&灰度图像

二值图像:仅包含黑色和白色两种颜色的图像。只用一个比特位就能表示(例如:0表示黑色,1表示白色)
灰度图像:计算机将灰度处理为256个灰度级。用数值区间[0,255]表示,相当于图像是从纯白到灰色再到黑色的单色调的平滑过渡。每一个级别表示不一样的灰度值。需要用一个字节来表示(例如:0表示纯黑色,1表示纯白色)

像素处理:

# 导入相关包
import cv2
import numpy as np
# 创建一个8X8的二维数组
img = np.zeros((8,8),dtype=np.uint8)
# 打印出这个二维数组
print("img=\n",img)

cv2.imshow("fir",img)
cv2.waitKey()
# 更改数组中的点的取值,来更改图中相应的像素
print("像素点img[0,3]=",img[0,3])
img[0,3] = 255
print("像素点img[0,3]=",img[0,3])

cv2.imshow("sec",img)
cv2.waitKey()

彩色图像

RGB色彩空间:R(red)通道、G(green)通道、B(blue)通道。和灰度表示一样,三个色彩通道用数值区间[0,255]表示各种不同颜色的组合。需要用一个三维数组来表示一幅彩色图像(例如:(0,0,0)表示纯黑,(255,255,255)表示纯白)
一般情况下:图像通道的顺序是R-G-B,但是在openCV中,通道顺序是B-G-R,刚好相反。

像素处理:可以使用形如img[a,b,c]的形式访问c通道的第a行第b列的像素点,得到一个数值y。也可以使用形如img[d,e]的形式访问第d行第e列的RGB值,得到一个三维数组,例如[x1,x2,x3]

# 导入相关包
import cv2
import numpy as np
# 创建一个三维数组,300=300组 300=每一组有300个列表 3=每个列表有3个元素
img = np.zeros((300,300,3),dtype=np.uint8)
# 打印出这个三维数组
print("img=\n",img)
# 将0通道也就是B通道 所有行 第0-100列的像素点改为255;以此类推
img[:,0:100,0] = 255
img[:,100:200,1] = 255
img[:,200:300,2] = 255

cv2.imshow("img",img)
cv2.waitKey()

numpy.array访问像素

numpy.array提供了item()和itemset()函数来访问和修改像素值。
灰度图像
item(行,列) 访问图像的像素点。
itemset(索引值,新值)修改像素值。
彩色图像
item(行,列,通道):必须指定通道。
itemset(三元组索引值,新值)。

# 导入相关包
import cv2
import numpy as np
# 读取一幅RGB图像
img = cv2.imread("C:\\Users\\NNoisy\\Desktop\\Jimin.jpg")
cv2.imshow("jimin",img)
cv2.waitKey()
# item访问指定像素点
print("访问第一行第二列的B通道:",img.item(1,2,0))
# 循环更改像素点
for i in range(0,100):
    for j in range(0,200):
        for k in range(0,3):
            img.itemset((i,j,k),255)
cv2.imshow("img",img)
cv2.waitKey()

感兴趣区域(ROI)

相当于对某个区域进行整体操作。可以用来放大图像啊,复制图像啊 之类的。例如:a = img[0:100,100:200] img[200:300,300:400] =a 就把前一个区域的图像复制到了后一块区域。

通道操作

通道拆分

通过索引拆分
# 导入相关包
import cv2
import numpy as np
# 读取一幅RGB图像
img = cv2.imread("C:\\Users\\NNoisy\\Desktop\\Jimin.jpg")
cv2.imshow("jimin",img)
cv2.waitKey()
# 获取图像的B通道
b = img[:,:,0]
# 改变b通道的值
img[:,:,0] = 0
cv2.imshow("img",img)
cv2.waitKey()
通过函数拆分cv2.split()
# 导入相关包
import cv2
import numpy as np
# 读取一幅RGB图像
img = cv2.imread("C:\\Users\\NNoisy\\Desktop\\Jimin.jpg")
cv2.imshow("jimin",img)
cv2.waitKey()
# 拆分图像的三个通道
b,g,r = cv2.split(img)
# 分别展示三个通道图像
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
cv2.waitKey()

在这里插入图片描述

通道合并cv2.merge()

语法为:cv2.merge([b,g,r])
值得注意的是,色彩通道顺序不同,图像的显示效果也不同。

# 导入相关包
import cv2
import numpy as np
# 读取一幅RGB图像
img = cv2.imread("C:\\Users\\NNoisy\\Desktop\\Jimin.jpg")
cv2.imshow("jimin",img)
cv2.waitKey()
# 拆分图像的三个通道
b,g,r = cv2.split(img)
# 使用不同的顺序合并色彩通道:bgr顺序为:b通道-->g通道-->r通道,以此类推
bgr=cv2.merge([b,g,r])
rgb=cv2.merge([r,g,b])

cv2.imshow("bgr",bgr)
cv2.imshow("rgb",rgb)
cv2.waitKey()

在这里插入图片描述

获取图像属性

图像常用属性:
shape:RGB图像返回包含行数,列数,通道数的数组。例如:(3,3,3)
灰度图像返回行数和列数。例如(5,5)
size:返回图像的像素数目,值为行X列X通道数,例如上述(3,3,3),size返回3X3X3=27
dtype:返回图像的数据类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值