通道的分离与合并使用的函数是:分离:cv.split(img) #img 是图像
合并:cv.merge([b,g,r]) #b,g,r 所分离的的通道,当按照不 同顺序进行合并时,所产生的图像也会不相同。
下面是cv.imread()函数使用方法
1.2转化为灰度图import cv2 as cv
img = cv.imread('1.jpg', cv2.IMREAD_UNCHANGED) #包含alpha通道
print(img.shape)img = cv.imread('1.jpg', cv2.IMREAD_COLOR) #彩色图像
print(img.shape)img = cv.imread('1.jpg', cv2.COLOR_BGR2GRAY) #颜色转换空间
print(img.shape)img = cv.imread('1.jpg', cv2.COLOR_RGB2GRAY)
print(img.shape)img = cv.imread('1.jpg', 1) #彩色图像
print(img.shape)img = cv.imread('1.jpg', cv2.IMREAD_GRAYSCALE) #灰度图像
print(img.shape)img = cv.imread('1.jpg', 0) #灰度图像
print(img.shape)
方法一:
gray_1 = 1/3*b + 1/3*g + 1/3*r show(gray_1)
b,g,r,是上面三通道的的分离。
# rgb转灰度图
img_gray2 = 0.114*b + 0.587*g + 0.299*r
# img_gray2 = (0.299*r + 0.587*g + 0.114*b).astype(np.uint8)
show(img_gray2)
方法二:
利用函数cv.cvtColor(图像,cv.COLOR_BGR2GRAY)
1.3图像的二值化二值化处理将使用到OpenCV中提供的阈值(threshold)函数:
cv2.threshold(灰度图,阈值,设定值,方法)
import cv2
#相对路径下读取图片
doge = cv2.imread('doge.jpg')
#灰度化处理
grayImage = cv2.cvtColor(doge,cv2.COLOR_BGR2GRAY)
#cv2.imshow('GRAY',grayImage)
#二值化处理,低于阈值的像素点灰度值置为0;高于阈值的值置为参数3
ret,thresh1 = cv2.threshold(grayImage,127,255,cv2.THRESH_BINARY)
cv2.imshow('BINARY',thresh1)
#大于阈值的像素点灰度值置为0;小于阈值置为参数3
ret,thresh2 = cv2.threshold(grayImage,127,200,cv2.THRESH_BINARY_INV)
cv2.imshow('BINARY_INV',thresh2)
#小于阈值的像素点灰度值不变,大于阈值的像素点置为该阈值
ret,thresh3 = cv2.threshold(grayImage,127,255,cv2.THRESH_TRUNC)
cv2.imshow('TRUNC',thresh3)
#小于阈值的像素点灰度值不变,大于阈值的像素点置为0,其中参数3任取
ret,thresh4 = cv2.threshold(grayImage,127,255,cv2.THRESH_TOZERO)
cv2.imshow('BINARY_TOZERO',thresh4)
#大于阈值的像素点灰度值不变,小于阈值的像素点置为0,其中参数3任取
ret,thresh5 = cv2.threshold(grayImage,127,255,cv2.THRESH_TOZERO_INV)
cv2.imshow('BINARY_TOZERO_INV',thresh5)
1.4图像相加将其
1.4.1图片直接相加obj = cv.imread("pic/hedgehog500x500.jpg",0) #后面的0表示灰度图像,1表示彩色图像
bg = cv.imread("pic/line500x500.jpg",0) #后面的0表示灰度图像,1表示彩色图像
mask = cv.imread("pic/mask500x500.jpg",0) #后面的0表示灰度图像,1表示彩色图像
noise = cv.imread("pic/hedgehog_noise_500x500.jpg",0) #后面的0表示灰度图像,1表示彩色图像
show(np.hstack([obj,bg,mask,noise])) #将图片拼接显示
注意:直接相加的前提必须是两者图片的大小相同
img_add = obj + bg
show(img_add)
img1 = cv.imread('4.jpg')
img2 = cv.imread('1.jpg')
imgadd = cv2.add(cv2.resize(img1,(200,200)),cv2.resize(img2,(200,200)))#将图片修改成寸
cv2.imshow('imgadd',imgadd)
cv2.waitKey(0)
img_add = cv.add(obj*0.5,bg*0.5)
show(img_add)
# 图像融合
combine = cv2.addWeighted(cv2.resize(img1,(200,200)),0.5,cv2.resize(img2,(200,200)),0.5,0)
cv2.imshow('combine',combine)
cv2.waitKey(0)
mask = mask/255(mask是一张只有黑手和白色的照片)除以255的作用是将其转变为数组只有0和1的数组。
img_mul = obj*mask
img_nul2 = cv.multiply(obj*1.0,mask) #融合时需要将两个位数相同的数字进行遮挡
show(np.hstack([img_mul,img_nul2]))



