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

相关推荐
漫随流水几秒前
leetcode算法(112.路径总和)
数据结构·算法·leetcode·二叉树
过期的秋刀鱼!8 分钟前
机器学习-带正则化的成本函数-
人工智能·python·深度学习·算法·机器学习·逻辑回归
ScilogyHunter10 分钟前
前馈/反馈控制是什么
算法·控制
shejizuopin13 分钟前
基于多鱼眼的视觉SLAM系统(毕业论文)
人工智能·数码相机·目标跟踪·毕业论文·答辩ppt·基于多鱼眼的·视觉slam系统
_OP_CHEN21 分钟前
【算法基础篇】(四十八)突破 IO 与数值极限:快速读写 +__int128 实战指南
c++·算法·蓝桥杯·算法竞赛·快速读写·高精度算法·acm/icpc
程序员泠零澪回家种桔子25 分钟前
RAG自查询:让AI精准检索的秘密武器
人工智能·后端·算法
国科安芯28 分钟前
微小卫星红外相机双MCU冗余架构的抗辐照可靠性评估
人工智能·单片机·嵌入式硬件·数码相机·架构·自动化·安全性测试
糖葫芦君32 分钟前
TRPO-trust region policy optimization论文讲解
人工智能·算法·机器学习·强化学习
HaiLang_IT1 小时前
基于RepVGG与注意力机制的手写潦草汉字识别算法研究
算法
一起努力啊~1 小时前
算法刷题--字符串
算法