图像的基本运算
通道的拆分与合并
import cv2
img = cv2.imread("图像名")
b,g,r =cv2.split(img)
import cv2
import numpy as np
a = cv2.imread("图片")
b,g,r =cv2.split(a)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
cv2.waitKey()
cv2.destroyAllWindows()
-
合并
import cv2 import numpy as np a = cv2.imread("图片") b,g,r=cv2.split(a) bgr = cv2.merge([b,g,r]) rgb = cv2.merge([r,g,b]) cv2.imshow('bgr',bgr) cv2.imshow("rgb",rgb) cv2.waitKey() cv2.destroyAllWindows()
import numpy as np
a=cv2.imread("图片")
rows,cols,chn=a.shape
b=cv2.split(a)[0]
g = np.zeros((rows,cols),dtype=a.dtype)
r = np.zeros((rows,cols),dtype=a.dtype)
m=cv2.merge([b,g,r])
cv2.imshow("merge",m)
cv2.waitKey()
cv2.destroyAllWindows()
图像运算
- 加法运算----numpy加法运算
取模 运算方式:结果=图像1+图像2
-
加法运算----opencv加法运算
饱和运算
运算方式:结果cv2.add(图像1,图像2)
Numpy加法与Opencv加法比较(参与运算的图像大小,类型必须一致!!!)
import cv2
import cv2 import numpy as np a =cv2.imread("图片") b = a result1 =a+b result2 = cv2.add(a,b) cv2.imshow("orginal",a) cv2.imshow("result1",result1) cv2.imshow("result2",result2) cv2.waitKey() cv2.destroyAllWindows()
-
图像融合
将2张或2张以上的图像信息融合到一张图像上,融合的图像航油更多的信息、能够更方便人来观察或者计算机处理
import cv2 import numpy as np a =cv2.imread("image") b =cv2.imread("image") result = cv2.addWeighted(a,0.3,b,0.7,0) cv2.imshow("boat",a) cv2.imshow("lena",b) cv2.imshow("result",result) cv2.waitKey() cv2.destroyAllWindows()
如果2张图片的大小不一致,怎么处理?案例如下:
import cv2
import numpy as np
a =cv2.imread("image//cat.jfif")
b =cv2.imread("image//view.jfif")
print(a.shape)
print(b.shape)
ROIa = a[0:700,0:700]
ROIb = b[0:700,0:700]
# cv2.imshow("roia",ROIa)
# cv2.imshow("roib",ROIb)
result = cv2.addWeighted(ROIa,0.3,ROIb,0.7,0)
# cv2.imshow("cat",a)
# cv2.imshow("view",b)
cv2.imshow("result",result)
cv2.waitKey()
cv2.destroyAllWindows()
-
图像类型转换
类型转换
opencv 提供了200多种不同类型之间的转换re=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
cv2.COLOR_BGR2GRAY
cv2.COLOR_BGR2RGB
cv2.COLOR_GRAY2BGRimport cv2 a=cv2.imread("image\\lenacolor.png") b=cv2.cvtColor(a,cv2.COLOR_BGR2GRAY) cv2.imshow("lenaColor",a) cv2.imshow("lenaGray",b) cv2.waitKey() cv2.destroyAllWindows()
#案例1:将BGR转换为RGB import cv2 a=cv2.imread("image") b=cv2.cvtColor(a,cv2.COLOR_BGR2RGB) cv2.imshow("BGR",a) cv2.imshow("RGB",b) cv2.waitKey() cv2.destroyAllWindows()
#案例2:灰度图像转换彩色图像 import cv2 a=cv2.imread("image",cv2.IMREAD_UNCHANGED) b=cv2.cvtColor(a,cv2.COLOR_GRAY2BGR) cv2.imshow("GRAY",a) cv2.imshow("BGR",b) cv2.waitKey() cv2.destroyAllWindows()
#分别打印shape看区别 import cv2 a=cv2.imread("image",cv2.IMREAD_UNCHANGED) b=cv2.cvtColor(a,cv2.COLOR_GRAY2BGR) print(a.shape) print(b.shape)
#灰度图像转换彩色图像 通道拆分 import cv2 a=cv2.imread("image",cv2.IMREAD_UNCHANGED) b=cv2.cvtColor(a,cv2.COLOR_GRAY2BGR) bb,bg,br=cv2.split(b) cv2.imshow("bb",bb) cv2.imshow("bg",bg) cv2.imshow("br",br) cv2.waitKey() cv2.destroyAllWindows()
-
图像缩放
resize(函数)
语法:dst = cv2.resize(src,dsize[,dst[,fx[,fy[,interpolation]]]])
dst = cv2.resize(src,dsize) 必填参数 src: 图像来源 dszie:缩放大小 举例:b= cv2.resize(a,(122,122))
列 行
dst = cv2.resize(src,dsize,fx,fy) fx,fy缩放大小 水平方向 垂直方向
举例: b = cv2.resize(a,None,fx=0.5,fy=0.7) 注意: deszie fx,fy设置一个即可
import cv2
a=cv2.imread("image\\lenacolor.png")
b=cv2.resize(a,(200,100))
#注意:第2个参数控制的是“列长度、行长度”,注意顺序。
cv2.imshow("original",a)
cv2.imshow("resize",b)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
import numpy as np
a=cv2.imread("image\\lenacolor.png")
b=cv2.resize(a,None,fx=1.2,fy=0.5)
cv2.imshow("original",a)
cv2.imshow("resize",b)
cv2.waitKey()
cv2.destroyAllWindows()
7. 图像旋转
语法:dst = cv2.flip(src,flipCode) 例如:dst =cv2.flip(src,1)
flipCode = 0 以x轴翻转
flipCode > 0 以y轴翻转
flipCode < 0 以x轴翻转一次,y轴翻转一次
import cv2
a=cv2.imread("image")
b=cv2.flip(a,-1)
cv2.imshow("original",a)
cv2.imshow("flip",b)
cv2.waitKey()
cv2.destroyAllWindows()