1、学习目标
对图像进行一些基本和算术运算。
在此次实验中
(1)更改图片上一些图形(感兴趣的区域ROI)的位置
(2)叠加两张图片
2、使用函数方法
img.shape:返回行数,列数和通道数的元组
img.size:返回访问的总像素数
img.dtype:返回获取Image数据类型
cv2.split(img):数组的输出向量;如果需要,数组本身将被重新分配。
cv2.merge((b,g,r)):通道数将是矩阵数组中通道的总数
cv2.resize(): 调整图像大小
cv2.add(img,img2): 计算两个数组或数组和标量的每元素总和。
cv2.addWeighted(img,.2,img2,.8,0):计算两个数组的加权和。
3、程序
(1)把图像中的ball这个图形从[7:9, 10,14]这个部位移到[2:3, 5:8]这个地方
结果实例:
(2)将两张图调整一样的大小,叠加在一起。
结果
(3)调整两张图片各自的权重
程序函数讲解
(1)访问和修改像素值
加载彩色图像
import cv2
import numpy as np
img = cv2 . imread ( 'messi5.jpg' )
通过行和列坐标访问像素值。 对于BGR图像,它返回一个蓝色,绿色,红色值的数组。 对于灰度图像,仅返回相应的强度。
px = img [ 100 , 100 ]
print px
得到的结果
[157 166 200]
# 仅访问蓝色像素
blue = img [ 100 , 100 , 0 ]
print blue
得到结果
157
以相同的方式修改像素值
img [ 100 , 100 ] = [ 255 , 255 , 255 ]
print img [ 100 , 100 ]
得到结果
[255 255 255]
修改像素值的其他更好的方法
# 获得red的像素值
img . item ( 10 , 10 , 2 )
结果 59
# 修改red的像素值
img . itemset (( 10 , 10 , 2 ), 100 )
img . item ( 10 , 10 , 2 )
结果100
(2)访问图像属性
图像属性包括行数,列数和通道数,图像数据类型,像素数等。
(a)访问图像的形状
img.shape
返回一组行,列和通道的元组(如果图像是彩色的)
如果图像是灰度,则返回的元组仅包含行数和列数。
(b)访问的像素总数
img.size
(c)图像数据类型
img.dtype
img.dtype在调试时非常重要,
因为OpenCV-Python代码中的大量错误是由无效的数据类型引起的。
(3)图像
(a)对图像的某一区域进行处理
(例如,对于图像中的眼睛检测,在整个图像上进行第一次面部检测,并且当获得面部时,我们单独选择面部区域并搜索其内部的眼睛而不是搜索整个图像)
例如上述程序(1)
使用Numpy索引再次获得ROI
选择球并将其复制到图像中的另一个区域
ball = img[280:340, 330:390]
img[273:333, 100:160] = ball
(b)拆分和合并图像通道
在B,G,R通道图像上单独工作
将BGR图像分割为单个平面
或者将这些单独的通道连接到BGR图像。
b,g,r = cv2.split(img)
img = cv2.merge((b,g,r))
或
b = img[:,:,0]
将所有红色像素设为零,使用Numpy索引
img[:,:,2] = 0
cv2.split()是一项代价高昂的操作(就时间而言)。 所以只有在你需要时才这样做。 否则去Numpy索引。
内容来自
https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html
(4)计算两个数组的加权和。
cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) → dst
此函数可以用一下矩阵表达式来代替:
dst = src1 * alpha + src2 * beta + gamma;
alpha 为 src1 透明度,beta 为 src2 透明度
src1 - 第一个输入数组。
alpha - 第一个数组元素的权重。
src2 - 与src1具有相同大小和通道编号的第二个输入数组。
beta - 第二个数组元素的权重。
dst - 与输入数组具有相同大小和通道数的输出数组。
gamma - 标量加到每个总和。
dtype - 输出数组的可选深度;当两个输入数组具有相同的深度时,
dtype可以设置为-1,这相当于src1.depth()
程序中的例子
cv2.addWeighted(img,.2,img2,.8,0)