用python将图像二值化,形态学运算,轮廓提取,精确扣取前景,使用罩层更换背景图像的代码
时间: 2023-06-06 17:06:31 浏览: 93
基于Python二值图像的形态学变换【100011778】
以下是用 Python 对图像进行二值化、形态学运算、轮廓提取和精确扣取前景,使用遮罩更换背景图像的示例代码:
```python
import cv2
import numpy as np
# 读入待处理图片
img = cv2.imread('image.jpg')
# 将图像转换为灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 将灰度图二值化
ret, thresh_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)
# 对二值化后的图像进行形态学处理,以去除噪点,填充空洞
kernel = np.ones((5, 5), np.uint8)
morph_img = cv2.morphologyEx(thresh_img, cv2.MORPH_CLOSE, kernel)
# 提取图像中的轮廓
contours, hierarchy = cv2.findContours(morph_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 创建一个黑色的遮罩
mask = np.zeros_like(img)
# 循环遍历轮廓,将轮廓内部涂白,制作遮罩
for contour in contours:
cv2.drawContours(mask, [contour], 0, (255, 255, 255), -1)
# 使用遮罩更换背景图像
new_bg = cv2.imread('new_bg.jpg')
new_bg = cv2.resize(new_bg, (img.shape[1], img.shape[0]))
new_img = cv2.bitwise_and(new_bg, mask) + cv2.bitwise_and(img, cv2.bitwise_not(mask))
# 显示结果图片
cv2.imshow('new image', new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注意:由于该代码涉及图像相关处理,为了运行代码,需要在 Python 环境下安装 OpenCV 库。
阅读全文