图像基本操作
图像像素级处理
opencv
- 读取像素
- 返回值 = 图像(位置参数)
- 灰度图像:返回灰度值——
p=img[88, 142]
——print(p)
- RGB图像:返回
B
、G
、R
的值blue=img[78, 125, 0]
——print(blue)
green=img[78, 125, 1]
——print(green)
red=img[78, 125, 2]
——print(red)
p=img[78, 125]
——print(p)
——三个值
- 修改像素
- 灰度图像:
img[88, 99]=255
- RGB图像:
img[88, 99, 0]=255
img[88, 99, 1]=255
img[88, 99, 2]=255
img[88, 99]=[255,255,255]
- 灰度图像:
numpy
- 读取像素
- 返回值 = 图像.item(位置参数)
- 灰度图像:返回灰度值——
p=img.item(88, 142)
——print(p)
- RGB图像:返回
B
、G
、R
的值blue=img.item(78, 125, 0)
——print(blue)
green=img.item(78, 125, 1)
——print(green)
red=img.item(78, 125, 2)
——print(red)
p=img.item(78, 125)
——print(p)
——三个值
- 修改像素值
- 图像名.itemset(位置, 新值)
- 灰度图像:
img.itemset((88, 99), 255)
- RGB图像:
img.itemset((88, 99, 0), 255)
img.itemset((88, 99, 1), 255)
img.itemset((88, 99, 2), 255)
获取图像属性
- 形状:行、列、通道数
shape
可以获取图像的形状,返回包含行数、列数、通道数的元组- 灰度:返回行数、列数——
img.shape
——(512, 512)
- 彩度:返回行数、列数、通道数——
img.shape
——(512, 512, 3)
- 像素数目
size
可以获取图像的像素数目- 灰度:返回 行数*列数——
img.size
- 彩度:返回 行数*列数*通道数
- 图像的数据类型
dtype
返回的是图像的数据类型- 例:
img.dtype
——uint8
图像ROI
- ROI (region of interest),感兴趣区域
- 从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域
- 可以通过各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理
face=a[220:400, 250:350]
——感兴趣区域——可以复制什么的
图像通道操作
- 拆分通道
import cv2
img = cv2.imread('lena.png')
## 方式一
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
## 方式二
b, g, r = cv2.split(img)
## 方式三
b = cv2.split(a)[0]
g = cv2.split(a)[1]
r = cv2.split(a)[2]
- 合并通道:
cv2.merge([b,g,r])
- 注意顺序
图像运算
加法运算
Numpy
- 取模加法——运算方式:结果=图像1+图像2
- 超过255:
%255
- 超过255:
OpenCV
- 饱和运算——运算方式:结果=cv2.add(图像1,图像2)
- 超过255:
255
- 超过255:
注意:
- 参与运算的图像大小、类型必须一致
- vs加法运算:有权重
- 函数
addWeighted
:cv2.addWeighted(src1, alpha, src2, beta, gamma)
src1
:图像1alpha
:图像1权重src2
:图象2beta
:图像2权重gamma
:亮度调节值——不能省略——不想调,设0
- 例:
cv2.addWeighted(img1, 0.3, img2, 0.6, 0)
图像融合
- 将2张或2张以上的图像信息的融合到1张图像上
- 融合的图像含有更多的信息、能够更方便人来观察或计算机处理
几何变换
图像缩放
- 函数
resize
- 格式:
dst = cv2.resize(src, dsize[, dst[ ,fx[ ,fy[ ,interpolation]]]])
src
:原始图像dsize
:缩放大小- 例:
cv2.resize(a, (122, 123))
:缩放成122列,123行
- 例:
fx, fy
:缩放大小- 例:
cv2.resize(a, None, fx=0.5, fy=0.7)
- 例:
图像翻转
- 函数
flip
- 格式:
dst = cv2.flip(src, flipCode)
src
:原始图像flipCode
=0
:以X轴为对称轴翻转>0
:以Y轴为对称轴翻转<0
:以X轴、Y轴方向同时翻转