irpas技术客

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

未知 7126

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)

?

?

?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Python #and #opencv #自学笔记2图像的简单处理 #top_size