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


    1. import cv2
    2. import numpy as np
    3. # 定义回调函数
    4. def callback(x):
    5. pass
    6. # 打开摄像头
    7. cap = cv2.VideoCapture(0)
    8. # 创建窗口和控件
    9. cv2.namedWindow('image')
    10. cv2.createTrackbar('threshold', 'image', 0, 255, callback)
    11. # 初始化参数
    12. bgdModel = np.zeros((1, 65), np.float64)
    13. fgdModel = np.zeros((1, 65), np.float64)
    14. rect = (0, 0, 1, 1)
    15. while True:
    16. # 获取当前帧
    17. ret, frame = cap.read()
    18. # 转换为灰度图像
    19. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    20. # 获取阈值
    21. threshold = cv2.getTrackbarPos('threshold', 'image')
    22. # 进行前景和背景的分割
    23. mask = np.zeros(gray.shape, np.uint8)
    24. mask[gray >= threshold] = 1
    25. cv2.imshow('mask', mask)
    26. # 对分割后的图像进行分水岭处理
    27. markers = cv2.watershed(frame, mask)
    28. # 绘制分割结果
    29. frame[markers == -1] = [255, 0, 0]
    30. # 显示结果
    31. cv2.imshow('image', frame)
    32. # 按下ESC键退出程序
    33. if cv2.waitKey(1) == 27:
    34. break
    35. # 释放摄像头并关闭窗口
    36. cap.release()
    37. cv2.destroyAllWindows()

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

  • 相关阅读:
    sessionStorage & localStorage、session & cookie
    鸡尾酒学习——长岛冰茶
    npm安装错误大全
    css滤镜
    SaaSBase:微宏科技是什么?
    OneFlow中的错误处理:Maybe
    小众调度器
    Apache RocketMQ
    【代数学习题4.2】从零理解范数与迹 —— 求数域元素的范数与迹
    个人项目(玩具)列表(可能会更新)
  • 原文地址:https://blog.csdn.net/SYC20110120/article/details/134318251