我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python+OpenCV怎么实现阈值分割

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python+OpenCV怎么实现阈值分割

这篇文章主要介绍“Python+OpenCV怎么实现阈值分割”,在日常操作中,相信很多人在Python+OpenCV怎么实现阈值分割问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python+OpenCV怎么实现阈值分割”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    一、全局阈值

    原图:

    Python+OpenCV怎么实现阈值分割

    整幅图采用一个阈值,与图片的每一个像素灰度进行比较,重新赋值;

    1.效果图

    Python+OpenCV怎么实现阈值分割

    2.源码

    import cv2import matplotlib.pyplot as plt#设定阈值thresh=130#载入原图,并转化为灰度图像img_original=cv2.imread(r'E:\py\python3.7\test2\test14yuzhi\cell.png',0)img_original=cv2.resize(img_original,(0,0),fx=0.3,fy=0.3)#采用5种阈值类型(thresholding type)分割图像retval1,img_binary=cv2.threshold(img_original,thresh,255,cv2.THRESH_BINARY)retval2,img_binary_invertion=cv2.threshold(img_original,thresh,255,cv2.THRESH_BINARY_INV)retval3,img_trunc=cv2.threshold(img_original,thresh,255,cv2.THRESH_TRUNC)retval4,img_tozero=cv2.threshold(img_original,thresh,255,cv2.THRESH_TOZERO)retval5,img_tozero_inversion=cv2.threshold(img_original,thresh,255,cv2.THRESH_TOZERO_INV)#采用plt.imshow()显示图像imgs=[img_original,img_binary,img_binary_invertion,img_trunc,img_tozero,img_tozero_inversion]titles=['original','binary','binary_inv','trunc','tozero','tozero_inv']for i in range(6):    plt.subplot(2,3,i+1)    plt.imshow(imgs[i],'gray')    plt.title(titles[i])    plt.xticks([])    plt.yticks([])plt.show()

    二、滑动改变阈值(滑动条)

    1.效果图

    Python+OpenCV怎么实现阈值分割

    2.源码

    代码如下(示例):

    import cv2import numpy as npimport matplotlib.pyplot as plt#载入原图,转化为灰度图像,并通过cv2.resize()等比调整图像大小img_original=cv2.imread(r'E:\py\python3.7\test2\test14yuzhi\cell.png',0)img_original=cv2.resize(img_original,(0,0),fx=0.3,fy=0.3)#初始化阈值,定义全局变量imgsthresh=130imgs=0#创建滑动条回调函数,参数thresh为滑动条对应位置的数值def threshold_segmentation(thresh):    #采用5种阈值类型(thresholding type)分割图像    retval1,img_binary=cv2.threshold(img_original,thresh,255,cv2.THRESH_BINARY)    retval2,img_binary_invertion=cv2.threshold(img_original,thresh,255,cv2.THRESH_BINARY_INV)    retval3,img_trunc=cv2.threshold(img_original,thresh,255,cv2.THRESH_TRUNC)    retval4,img_tozero=cv2.threshold(img_original,thresh,255,cv2.THRESH_TOZERO)    retval5,img_tozero_inversion=cv2.threshold(img_original,thresh,255,cv2.THRESH_TOZERO_INV)    #由于cv2.imshow()显示的是多维数组(ndarray),因此我们通过np.hstack(数组水平拼接)    #和np.vstack(竖直拼接)拼接数组,达到同时显示多幅图的目的    img1=np.hstack([img_original,img_binary,img_binary_invertion])    img2=np.hstack([img_trunc,img_tozero,img_tozero_inversion])    global imgs    imgs=np.vstack([img1,img2])#新建窗口cv2.namedWindow('Images')#新建滑动条,初始位置为130cv2.createTrackbar('threshold value','Images',130,255,threshold_segmentation)#第一次调用函数threshold_segmentation(thresh)#显示图像while(1):    cv2.imshow('Images',imgs)    if cv2.waitKey(1)==ord('q'):        breakcv2.destroyAllWindows()

    三、自适应阈值分割

    1.效果图

    Python+OpenCV怎么实现阈值分割

    2.源码

    代码如下(示例):

    import cv2import matplotlib.pyplot as plt#载入原图img_original=cv2.imread(r'E:\py\python3.7\test2\test14yuzhi\cell.png',0)#全局阈值分割retval,img_global=cv2.threshold(img_original,130,255,cv2.THRESH_BINARY)#自适应阈值分割img_ada_mean=cv2.adaptiveThreshold(img_original,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,15,3)img_ada_gaussian=cv2.adaptiveThreshold(img_original,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,15,3)imgs=[img_original,img_global,img_ada_mean,img_ada_gaussian]titles=['Original Image','Global Thresholding(130)','Adaptive Mean','Adaptive Guassian',]#显示图片for i in range(4):    plt.subplot(2,2,i+1)    plt.imshow(imgs[i],'gray')    plt.title(titles[i])    plt.xticks([])    plt.yticks([])plt.show()

    3.GaussianBlur()函数去噪

    Python+OpenCV怎么实现阈值分割

    代码如下(示例):

    import cv2import matplotlib.pyplot as plt#载入原图img_original=cv2.imread(r'E:\py\python3.7\test2\test14yuzhi\cell.png',0)#高斯滤波img_blur=cv2.GaussianBlur(img_original,(13,13),13)  #根据情况修改参数#自适应阈值分割img_thresh=cv2.adaptiveThreshold(img_original,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,15,3)img_thresh_blur=cv2.adaptiveThreshold(img_blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,15,3)#显示图像imgs=[img_thresh,img_thresh_blur]titles=['img_thresh','img_thresh_blur']for i in range(2):    plt.subplot(1,2,i+1)    plt.imshow(imgs[i],'gray')    plt.title(titles[i])    plt.xticks([])    plt.yticks([])plt.show()

    四、参数解释

    cv2.threshold(class="lazy" data-src, thresh, maxval, type)

    参数:

    class="lazy" data-src:输入的图像

    thresh:图像分割所用的阈值(threshold value)

    maxval:当阈值类型(thresholding type)采用cv2.THRESH_BINARY和cv2.THRESH_BINARY_INV时像素点被赋予的新值

    type:介绍6种类型:

    cv2.THRESH_BINARY(当图像某点像素值大于thresh(阈值)时赋予maxval,反之为0。注:最常用)

    cv2.THRESH_BINARY_INV(当图像某点像素值小于thresh时赋予maxval,反之为0)

    cv2.THRESH_TRUNC(当图像某点像素值大于thresh时赋予thresh,反之不变。注:虽然maxval没用了,但是调用函数不能省略)

    cv2.THRESH_TOZERO(当图像某点像素值小于thresh时赋予0,反之不变。注:同上)

    cv2.THRESH_TOZERO_INV(当图像某点像素值大于thresh时赋予0,反之不变。注:同上)

    cv2.THRESH_OTSU(该方法自动寻找最优阈值,并返回给retval,见下文)

    返回值:

    retval:设定的thresh值,或者是通过cv2.THRESH_OTSU算出的最优阈值

    dst:阈值分割后的图像

    到此,关于“Python+OpenCV怎么实现阈值分割”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Python+OpenCV怎么实现阈值分割

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Python+OpenCV怎么实现阈值分割

    这篇文章主要介绍“Python+OpenCV怎么实现阈值分割”,在日常操作中,相信很多人在Python+OpenCV怎么实现阈值分割问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python+OpenCV怎么
    2023-06-30

    python+opencv实现阈值分割

    使用Python和OpenCV可以很容易地实现阈值分割。下面是一个简单的示例代码:```pythonimport cv2# 读取图像image = cv2.imread('image.jpg', 0)# 二值化阈值分割_, binary_i
    2023-08-14

    python中怎么使用opencv实现阈值分割

    在Python中使用OpenCV实现阈值分割可以按照以下步骤进行:1. 导入OpenCV库:```pythonimport cv2```2. 读取图像:```pythonimg = cv2.imread('image.jpg', 0) #
    2023-08-15

    python怎么实现图像自动阈值分割

    本文小编为大家详细介绍“python怎么实现图像自动阈值分割”,内容详细,步骤清晰,细节处理妥当,希望这篇“python怎么实现图像自动阈值分割”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。引言图像阈值分割是一种
    2023-07-02

    OpenCV怎么实现反阈值二值化

    本篇内容介绍了“OpenCV怎么实现反阈值二值化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!反阈值二值化反阈值二值化与阈值二值化互为逆操作
    2023-06-25

    python+opencv图像分割如何实现分割不规则ROI区域

    这篇文章将为大家详细讲解有关python+opencv图像分割如何实现分割不规则ROI区域,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python有哪些常用库python常用的库:1.requesuts
    2023-06-14

    怎么使用Python第三方opencv库实现图像分割处理

    这篇文章主要介绍了怎么使用Python第三方opencv库实现图像分割处理的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python第三方opencv库实现图像分割处理文章都会有所收获,下面我们一起来看
    2023-07-02

    Python怎么实现图像分割

    本篇内容介绍了“Python怎么实现图像分割”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法一import randomimport nu
    2023-06-29

    Python OpenCV基于HSV的颜色分割如何实现

    本文小编为大家详细介绍“Python OpenCV基于HSV的颜色分割如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python OpenCV基于HSV的颜色分割如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
    2023-07-02

    OpenCV基于分水岭算法的图像分割怎么实现

    本文小编为大家详细介绍“OpenCV基于分水岭算法的图像分割怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“OpenCV基于分水岭算法的图像分割怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.
    2023-07-05

    C++中怎么实现OpenCV图像分割与分水岭算法

    小编给大家分享一下C++中怎么实现OpenCV图像分割与分水岭算法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!分水岭算法是一种图像区域分割法,在分割的过程中,它
    2023-06-15

    OpenCV-Python怎么使用分水岭算法实现图像分割与提取功能

    小编给大家分享一下OpenCV-Python怎么使用分水岭算法实现图像分割与提取功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!随着当今世界的发展,计算机视觉技
    2023-06-15

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录