python and opencv 自学笔记2:图像的简单处理

这篇博客介绍了OpenCV库中的一些基本图像处理操作,包括使用copyMakeBorder进行边界填充,resize实现图像缩放,通过直接计算、图像融合和加权运算改变图像像素值,以及运用threshold进行图像阈值处理。这些技术在图像分析和计算机视觉领域广泛应用。
摘要由CSDN通过智能技术生成

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)

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值