目录
一、所需函数
## 1. 图像读取
img = cv.imread()
## 2. 彩色图转灰度图
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
## 3. 二值化图像(灰度图转二值图)
_, img_bin = cv.threshold(img_gray, th1, th2, cv.THRESH_BINARY)
## 4. 保存图像
cv.imwrite('pic/bear_gray.jpg', img_gray)
## 5. 通道分离
b, g, r = cv.split(img)
## 6. 通道合并
img_new = cv.merge([b, g, r])
## 7. 两图像相加、相减、相乘、相除
img = cv.add(img1, img2)
img = cv.subtract(img1, img2)
img = cv.multiply(img1, img2)
img = cv.divide(img1, img2)
二、图像基本知识
1、自定义图像
b = np.array([
[0, 127, 255],
[255, 0, 255],
[10, 50, 100]
], dtype=np.uint8)
g = b.T
r = b - g
# show(b)
show(cv.merge([b, g, r]))
# cv.imwrite()
2、三种常见图像相互转换
def show(img):
if img.ndim == 2:
plt.imshow(img, cmap='gray')
else:
plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
plt.show()
# 读取彩色图
img = cv.imread('pic/bear500x333.jpg')
# print(img)
show(img)
# 读取灰度图
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
show(img_gray)
# 二值化图像
_, img_bin = cv.threshold(img_gray, 150, 255, cv.THRESH_BINARY)
show(img_bin)
# 保存图像
cv.imwrite('pic/apple_gray.jpg', img_gray)
cv.imwrite('pic/apple_bin.jpg', img_bin)
3、通道分离与合并
# 分离BGR通道
# r = img[:,:,0]
b, g, r = cv.split(img)
# b.shape
#show(b)
#show(g)
show(r)
# 合并BGR通道
img_new = cv.merge([b, g, r])
show(img_new)
# 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)
三、图像运算
bg = cv.imread('D:\\proclass\\class\\pic\\background.jpg', 0)
ob = cv.imread('D:\\proclass\\class\\pic\\computer500x500.jpg', 0)
show(np.hstack([bg, ob]))
# 图像相加
# img_add = cv.add(bg*0.5, ob*0.5)
img_add = bg * 0.5 + ob * 0.5
show(img_add)
# 图像相减
# img_sub = img_add - bg * 0.5
img_sub = cv.subtract(img_add, bg * 0.5)
show(img_sub)
# 图像相乘
mask = cv.imread('D:\\proclass\\class\\pic\\mask500x500.jpg', 0)
# mask /= 255
# show(mask)
show(np.hstack([ob, mask]))
img_mul = cv.multiply(ob/1.0, mask/255)
show(img_mul)
# 图像相除
ob_noise = cv.imread('D:\\proclass\\class\\pic\\hedgehog_noise_500x500.jpg', 0)
show(np.hstack([ob, ob_noise]))
img_div = cv.divide(ob, ob_noise+1)
show(img_div)
四、实例
bg = cv.imread('pic/petal500x500.jpg')
ob = cv.imread('pic/hedgehog500x500.jpg')
mask = cv.imread('pic/mask500x500.jpg')
show(np.hstack([bg, ob, mask]))
ob_select = np.float32(ob/1.0) * np.float32(mask/255.0)
show(np.uint8(ob_select))
bg_select = np.float32(bg/1.0) * np.float32(1-mask/255.0)
show(np.uint8(bg_select))
nice = cv.add(ob_select*0.8, bg_select).astype(np.uint8)
show(nice)