利用 pythonopencv 实现 1 读取图像.显示原图像 2 第一次提取前景.得到初步掩模图像.并显示 3 通过交互式的图片.修正掩模图像.4 第二次提取前景.并显示 3 将掩模和原图像相乘得到分割图像.显示最后分割图像
时间: 2024-02-12 10:03:45 浏览: 119
好的,让我们来分步实现你的需求。
1. 读取图并显示原图像
```
import cv2# 读取图像
img = cv2.imread('image.jpg')
# 显示原图像
cv2.imshow('Original Image', img)
cv.waitKey(0)
cv2.destroyAllWindows()
```
. 第一次提取前景并显示初步掩模图像
```
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 提取前景
fgbg = cv2.createBackgroundSubtractorMOG2()
mask = fgbg.apply(img)
# 显示掩模图像
cv2.imshow('Mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
3. 通过交互式的图片修正掩模图像
```
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 初始化掩模
mask = np.zeros(img.shape[:2], np.uint8)
# 进入交互式画图模式
drawing = False
mode = True
ix, iy = -1, -1
def draw_circle(event, x, y, flags, param):
global ix, iy, drawing, mode
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
ix, iy = x, y
elif event == cv2.EVENT_MOUSEMOVE:
if drawing == True:
if mode == True:
cv2.circle(mask, (x, y), 5, (255, 255, 255), -1)
else:
cv2.circle(mask, (x, y), 5, (0, 0, 0), -1)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
if mode == True:
cv2.circle(mask, (x, y), 5, (255, 255, 255), -1)
else:
cv2.circle(mask, (x, y), 5, (0, 0, 0), -1)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)
while(1):
cv2.imshow('image', img)
k = cv2.waitKey(1) & 0xFF
if k == ord('m'):
mode = not mode
elif k == 27:
break
# 释放所有窗口
cv2.destroyAllWindows()
```
4. 第二次提取前景并显示
```
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 创建前景背景提取器
fgbg = cv2.createBackgroundSubtractorMOG2()
# 提取前景
mask = fgbg.apply(img)
mask = cv2.bitwise_and(mask, mask, mask=mask)
# 显示前景
cv2.imshow('Foreground', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
5. 将掩模和原图像相乘得到分割图像并显示最后分割图像
```
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 创建前景背景提取器
fgbg = cv2.createBackgroundSubtractorMOG2()
# 提取前景
mask = fgbg.apply(img)
mask = cv2.bitwise_and(mask, mask, mask=mask)
# 将掩模和原图像相乘得到分割图像
res = cv2.bitwise_and(img, img, mask=mask)
# 显示最后分割图像
cv2.imshow('Segmented Image', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
以上就是基于Python OpenCV库实现读取图像、提取前景、交互式图片修正、分割图像等功能的代码实现。
阅读全文