在opencv OpenCV中打开相机摄像头,用分水岭算法实时实现图像的分割与提取

python 复制代码
import cv2
import numpy as np

# 定义回调函数
def callback(x):
    pass

# 打开摄像头
cap = cv2.VideoCapture(0)

# 创建窗口和控件
cv2.namedWindow('image')
cv2.createTrackbar('threshold', 'image', 0, 255, callback)

# 初始化参数
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)
rect = (0, 0, 1, 1)

while True:
    # 获取当前帧
    ret, frame = cap.read()

    # 转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 获取阈值
    threshold = cv2.getTrackbarPos('threshold', 'image')

    # 进行前景和背景的分割
    mask = np.zeros(gray.shape, np.uint8)
    mask[gray >= threshold] = 1
    cv2.imshow('mask', mask)

    # 对分割后的图像进行分水岭处理
    markers = cv2.watershed(frame, mask)

    # 绘制分割结果
    frame[markers == -1] = [255, 0, 0]

    # 显示结果
    cv2.imshow('image', frame)

    # 按下ESC键退出程序
    if cv2.waitKey(1) == 27:
        break

# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()

cv2.VideoCapture()函数打开摄像头,然后创建一个新窗口并添加一个用于调整阈值的滑动条。在每一帧图像中,我们通过cv2.cvtColor()将其转换为灰度图像,然后根据阈值获取前景和背景的分割结果。接下来,我们将分割结果传递给cv2.watershed()函数进行分水岭处理,然后将分水岭处理后的分割结果绘制到原图像中。最后,我们使用cv2.imshow()显示结果,并在用户按下ESC键时退出程序。

相关推荐
ADDDDDD_Trouvaille1 小时前
2026.2.13——OJ75-77题
c++·算法
重生之后端学习1 小时前
230. 二叉搜索树中第 K 小的元素
java·数据结构·算法·深度优先
近津薪荼1 小时前
dfs专题7—— 全排列
c++·学习·算法·深度优先
你的冰西瓜1 小时前
C++ STL算法——非修改序列算法
开发语言·c++·算法·stl
闻缺陷则喜何志丹1 小时前
P12275 [蓝桥杯 2024 国 Python B] 工厂|普及+
c++·算法·蓝桥杯·洛谷
宝贝儿好1 小时前
【强化学习】第九章:基于Action-Critic框架的强化学习
人工智能·python·深度学习·算法·动态规划
laplace01231 小时前
KL 散度1
人工智能·算法·agent·qwen
白中白121382 小时前
算法题-14
数据结构·算法·leetcode
2501_901147832 小时前
打家劫舍问题的动态规划解法与性能优化笔记
笔记·算法·动态规划
plus4s2 小时前
2月13日(73-75题)
数据结构·c++·算法