1.边界填充
在图像的上下左右填充一些东西,给图像设置一个边界框
cv2.copyMakeBorder(src, top_size, bottom_size, left_size, right_size, borderType[,value])
src:待处理的图片
top_size, bottom_size, left_size, right_size:图片上下左右需要填充的宽度
borderType:添加边界框的类型,有以下几种方法:
cv2.BORDER_REPLICATE:复制法,即复制最边缘像素,例如:1111|12345|5555;
cv2.BORDER_REFLECT:反射法,对感兴趣的图像中的像素,以图像边缘为轴,在两边像镜像一样复制,例如:321|12345|543
cv2.BORDER_REFLECT_101:反射法,但是以最边缘的像素为轴,例如:32|12345|43
cv2.BORDER_WRAP:外包装法,例如:345|12345|123
cv2.BORDER_CONSTANT:常量法,以常数值value填充。
top_size, bottom_size, left_size, right_size = (20,20,20,20)#相应方向上的边框宽度
img1=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REPLICATE)
img2=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT)
img3=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
img4=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
img5=cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_CONSTANT,0)
array=np.hstack((img1,img2,img3,img4,img5))
cv_show('array',array)
2.图片缩放
cv2.resize(src, dsize[, dst, fx=, fy=, interpolation])
src:输入图片
dsize:输出图片尺寸(a,b),若为(0,0)则不指定具体大小
dst:输出图片
fx, fy:沿x轴,y轴的缩放系数,与dsize不能同时为0
Interpolation:插入方式,共有5种:
INTER_NEAREST:最近邻插值法
INTER_LINEAR:双线性插值法(默认)
INTER_AREA:基于局部像素的重采样。对于图像抽取来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
INTER_CUBIC:基于4x4像素邻域的3次插值法
INTER_LANCZOS4:基于8x8像素邻域的Lanczos插值
3.图像的运算
(1)直接对图片三个通道每一个像素点的像素值做计算,例如:img=img+10,每个像素点+10
(2)图像融合
img1+img2,但若两张图片的形状和通道数不同则不能融合。若像素值超过255,则将超过的数%256
(3)加法运算
cv2.add(src1, src2,[ dst=None, mask=None, dtype=None])
src1, src2:相加的两张图片的形状和通道数应相同,或一张图片和一个数值直接相加,即(1)的情况。若像素值超过255,则超过的数取255
dst:输出结果保存的变量,默认值为None,如果为非None,输出图像保存到dst对应实参中,其大小和通道数与输入图像相同,图像的深度(即图像像素的位数)由dtype参数或输入图像确认
mask:图像掩码,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0(之后会详细说说)
dtype:输出图像数组的深度,即图像单个像素值的位数(如RGB用三个字节表示,则为24位)
dog=cv2.imread('dog.jpg')
cat=cv2.imread('cat.jpg')
rows, cols = cat.shape[:2] #获取cat的高度(行数rows)、宽度(列数cols)
dog=cv2.resize(dog,(cols,rows))#将dog调整为与cat相同的形状
dog_cat=cv2.add(dog,cat)
cv_show('dog_cat',dog_cat)
(4)加权运算
按一定权重将两张形状和通道数相同的图片融合
cv2.addWeighted(src1, weight1, src2, weight2[, b, dst, int dtype=-1])
weight1,weight2:权重,其中weight1+weight2=1
b:偏置
(了解过感知机的同学应该知道权重和偏置的意义)
4.图像阈值 ※(很重要!)
ret, dst = cv2.threshold(src, thresh, maxval, type)
ret:得到的阈值值
src:输入图,注意:只能输入单通道图像,灰度图
dst:输出图
thresh:阈值,经常设为127
maxval:当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
type:二值化操作的类型,有以下几种类型
cv2.THRESH_BINARY:阈值的二值化操作,超过阈值的数取maxval,否则取0
cv2.THRESH_BINARY_INV:二值化翻转操作THRESH_BINARY的反转,即超过阈值的数取0,否则取maxval
cv2.THRESH_TRUNC:截断操作,超过阈值的数取阈值,否则不变
cv2.THRESH_TOZERO:化零操作,超过阈值的数不变,否则取0
cv2.THRESH_TOZERO_INV:化零翻转操作,超过阈值的数取0,否则不变
gray=cv2.cvtColor(dog,cv2.COLOR_BGR2GRAY)
ret,thresh= cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
cv_show('thresh',thresh)