6、图像感兴趣区域ROI(region of interest)
从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域。可以通过各种算子(Operator) 和函数来求得感兴趣区域ROI,并进行图像的下一步处理。
假设我们感兴趣的区域为200行-400行,200列-400列,则采用切片,命名为face取出该区域。
img=cv2.imread(‘图像名称’)
face=img[200:400,200:400]
import cv2
import numpy as np
a=cv2.imread(r'D:\image\lenacolor.png')
b=np.ones((101,101,3)) #随便定义一个数组,b有三个通道,是一个空白图像
b=a[220:400,250:350] #让b等于a的感兴趣区域,a区域的范围是大致确定的
#a图像中导入b图像
a[0:180,0:100]=b #让a的0-108行和0-100列等于b,此时a的区域要和b里面的区域相等,b里面图像为180行100列,所以a切片区域要一致
girl=cv2.imread(r'D:\image\girl.bmp')
girl[180:360,100:200]=b #让girl的图像等于b的范围,
cv2.imshow('img1',a)
cv2.imshow('img2',b)
cv2.imshow('img3',girl)
cv2.waitKey()
cv2.destroyAllWindows()
7、通道拆分与合并
拆分通道
直接使用opencv拆分;
使用split()拆分
#直接使用opencv
img=cv2.imread('图像')
b=img[:,:,0]
g=img[:,:,1]
r=img[:,:.2]
#使用split()一次性拆分三个通道
import cv2
import numpy as np
a=cv2.imread(r'D:\image\lenacolor.png')
b,g,r=cv2.split(a)
cv2.imshow('img',a)
cv2.imshow('B',b)
cv2.imshow('G',g)
cv2.imshow('R',r)
cv2.waitKey(0)
cv2.destroyAllWindows()
#分别拆分三个通道
b=cv2.split(a)[0]
g=cv2.split(a)[1]
r=cv2.split(a)[2]
合并
使用函数merge()
cv2.merge([通道1,通道2,通道3])
#先拆分,在合并
import cv2
import numpy as np
a=cv2.imread(r'D:\image\lenacolor.png')
b,g,r=cv2.split(a)
m=cv2.merge([b,g,r])
#合并顺序不同,结果不同
import cv2
import numpy as np
a=cv2.imread(r'D:\image\lenacolor.png')
b,g,r=cv2.split(a)
bgr=cv2.merge([b,g,r])
rgb=cv2.merge([r,g,b])
brg=cv2.merge([b,r,g])
8、图像加法
Numpy加法
取模直接相加
如上图,若两图像像素相加和小于255,则像素结果为二者的和
若俩图像素相加大于255,则相加的结果对255取模。像素结果为二者的和除以255的余数。取余数
Opencv加法
饱和运算:使用函数cv2.add(图像1,图像2)
若两图像像素相加和小于255,则像素结果为二者的和
若俩图像素相加大于255,则像素的结果直接取255
9、图像融合
将2张或2张以上的图像信息的融合到1张图像上
融合的图像含有更多的信息、能够更方便人来观察或者计算机处理
例:两张不清楚的图像进行融合。
融合:结果图像=图像1系数1+图像2系数2+亮度调节量
img=img1*0.3+img2+0.7+18
使用函数cv2.addWeighted( )
dst=cv2.addWeightedeightedeighted(src1,alpha,src2,beta,gamma)
10、图像类型转换
OpenCV提供了200多种不同类型之间的转换。
使用函数cv2.cvtColor(要转换的图像,函数)
cv2.COLOR_BGR2GRAY 彩色转成灰色
cv2.COLOR_BGR2RGB 彩色转成蓝色
cv2.COLOR_GRAY2BGR 灰色转成彩色
灰度转彩色
b=cv2.cvtColor(a,cv2.COLOR_ GRAY2BGR)
结果并不是彩色图,但是已经拥有了三个通道,且三个通道像素值一样