opencv+python入门之四(图像加法、融合、类型转换(HSV,GRAY,BGR)、缩放、翻转)

1.图像加法

图像加法也有两种方法,第一是调用opencv中的库,第二是通过numpy方法。

首先介绍的是opencv中的方法。opencv通过调用cv2.add(img1,img2)来实现对像素值的相加,如果这两点像素值的和大于255,则会被设置成255,这样的效果就是图像会变亮。

numpy中则不同,如果像素值的和大于255,则会被对255取模(如果为300,则取模后值为45),因此效果与opencv中方法有少许不同。下面是运行效果。

opencv+python入门之四(图像加法、融合、类型转换(HSV,GRAY,BGR)、缩放、翻转)

2.图像融合

图像融合和图像加法有一些不同,他的计算方式是这样的:img = img1*权重+img2*权重+亮度。代码如下:

dst = cv2.addWeighted(img,0.7,img,0.7,18)

要注意的是融合的两幅图像大小要一致

3.类型转换

类型转换主要就是RGB图、灰度图和HSV色彩空间的互转,通过cv2.cvtcolor(图像,参数)

这里的参数主要有cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2RGB,cv2.COLOR_GRAY2BGR,cv2.COLOR_BGR2HSV这几类,下面以转换为灰度图为例:

dst = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

 HSV色彩空间是指Hue色相、Saturation饱和度和value亮度。其中色相是指具体的什么颜色,比如红、黄、绿等,如图

                                                           opencv+python入门之四(图像加法、融合、类型转换(HSV,GRAY,BGR)、缩放、翻转)

饱和度是指这个颜色的深浅,例如浅红、正红、深红等等;

亮度也称为色调、纯度。

HSV色彩空间分布如下:

                                     opencv+python入门之四(图像加法、融合、类型转换(HSV,GRAY,BGR)、缩放、翻转)

H是模型1中的圆心角,当SV都为1时,H代表的颜色都是纯色。

V是色彩点所在圆形切面到圆锥顶点的距离。在顶面上V=1 顶点V=0,V最高时颜色最亮,V=0时所有颜色都为黑色

S是色彩点到所在圆形切面圆心的距离与该圆半径的比例值,在圆锥表面上S=1,在圆心处S=0。当S=0时,所有的颜色都是灰色的。

HSV色彩变换可以用来进行颜色提取,下面是代码演示:

img = cv2.imread('F:\python\work\cv_learn\opencv.jpg',1)
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#转换为HSV格式
H,S,V = cv2.split(hsv)#分离
min_red = np.array([0,43,46])#设置阈值
max_red = np.array([10,255,255])
mask = cv2.inRange(hsv,min_red,max_red)#提取
cv2.imshow('input', mask)
V = cv2.bitwise_and(img, img, mask=mask)#按位与,通过掩膜显示红色

 效果如下:

opencv+python入门之四(图像加法、融合、类型转换(HSV,GRAY,BGR)、缩放、翻转)

关于上面代码中那两个高低阈值,可以参考下表:

opencv+python入门之四(图像加法、融合、类型转换(HSV,GRAY,BGR)、缩放、翻转)

4.图像缩放

图像缩放函数为cv2.resize(img,dsize[,dst[,fx[,fy[,interpolation]]]]),其中dsize是输出后的行列值,通过一个tuple传入;fx和fy指的是缩放的倍数,dsize和fx、fy不能同时使用。Interpolation是选用的插值方法,一般采用默认值即可。参数如下:

interpolation 选项 所用的插值方法
INTER_NEAREST 最近邻插值
INTER_LINEAR 双线性插值(默认设置)
INTER_AREA 使用像素区域关系进行重采样。 它可能是图像抽取的首选方法,因为它会产生无云纹理的结果。 但是当图像缩放时,它类似于INTER_NEAREST方法。
INTER_CUBIC 4x4像素邻域的双三次插值
INTER_LANCZOS4 8x8像素邻域的Lanczos插值

运行代码如下:

dst0 = cv2.resize(img,(200,200))#缩放成200x200的图像
dst1 = cv2.resize(img,None,fx=0.5,fy=0.5)
cv2.imshow('resouce',img)#显示原图
cv2.imshow('result1',dst0)#显示图像0
cv2.imshow('result2',dst1)#显示图像1

运行结果:

              opencv+python入门之四(图像加法、融合、类型转换(HSV,GRAY,BGR)、缩放、翻转)

5.图像翻转

图像翻转有三种方式:关于x轴对称翻转、关于y轴对称翻转、关于原点对称翻转,通过cv2.flip(src,flipmode)来实现,

分别对应这flipmode大于0,等于0和小于0。

相关代码如下:

dst0 = cv2.flip(dst,-1)#原点翻转
dst1 = cv2.flip(dst,0)#上下翻转
dst2 = cv2.flip(dst,1)#左右翻转
cv2.imshow('resouce',dst)#显示原图
cv2.imshow('yuandian',dst0)
cv2.imshow('left_right',dst2)
cv2.imshow('up_down',dst1)

运行结果如下图。 

          opencv+python入门之四(图像加法、融合、类型转换(HSV,GRAY,BGR)、缩放、翻转)

初次学习,若有不对之处欢迎指正!