栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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)

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/360217.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号