在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键时退出程序。

相关推荐
cwj&xyp25 分钟前
Python(二)str、list、tuple、dict、set
前端·python·算法
是十一月末29 分钟前
Opencv实现图片的边界填充和阈值处理
人工智能·python·opencv·计算机视觉
Eric.Lee20214 小时前
Paddle OCR 中英文检测识别 - python 实现
人工智能·opencv·计算机视觉·ocr检测
xiaoshiguang35 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode
爱吃西瓜的小菜鸡5 小时前
【C语言】判断回文
c语言·学习·算法
别NULL5 小时前
机试题——疯长的草
数据结构·c++·算法
TT哇5 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
yuanbenshidiaos6 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习6 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA7 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法