博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python opencv图像阀值
阅读量:3900 次
发布时间:2019-05-23

本文共 2102 字,大约阅读时间需要 7 分钟。

opencv阀值应用场景主要用于从黑白相片中提取出黑色目标或者是白色目标。

全局阀值:
阀值类型
在这里插入图片描述
全局阀值的函数为cv2.threshold (src, thresh, maxval, type)
在这里插入图片描述

import cv2from matplotlib import pyplot as pltimg = cv2.imread('sunshine.jpg',0)ret,res1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)ret,res2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)ret,res3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)ret,res4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)ret,res5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)titles = ['original','binary','ninary_inv','trunc','tozero','tozero_inv']images = [img,res1,res2,res3,res4,res5]for i in range(6):    plt.subplot(2,3,i+1),plt.imshow(images[i],'gray'),plt.title(titles[i])    plt.xticks([]),plt.yticks([])plt.show()

在这里插入图片描述

自适应阀值,主要是利用算法解决因阳光导致照片局部亮度不同,从而引起的提取误差。
主要函数是dst = cv2.adaptiveThreshold(src, maxval, thresh_type, type, Block Size)
在这里插入图片描述

import cv2from matplotlib import pyplot as plt#img = cv2.imread('sunshine.jpg',0)ret,res1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)res2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,13,2)res3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,13,2)images = [img, res1, res2,res3]titles = ['original','binary','mean','gaussian']for i in range(4):    plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')    plt.title(titles[i]),plt.xticks([]),plt.yticks([])plt.show()

在这里插入图片描述

OTSU二值化,
otsu二值化相比全局阀值不同之处是自动确定阀值
这里效果并不明显,可能是因为图片比较完好,没有高斯噪声:

import cv2from matplotlib import pyplot as plt#img = cv2.imread('sunshine.jpg',0)ret,res1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)res2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,13,2)ret,res3 = cv2.threshold(img,0,255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 高斯滤波后再采用Otsu阈值res4 = cv2.GaussianBlur(img,(5,5),0)ret,res5 = cv2.threshold(img,0,255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)images = [img,res1,res2,res3,res4,res5]titles = ['original','binary','gaussian','otsu','gaussian_filter','otsu_gaussian_filter']for i in range(6):    plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')    plt.title(titles[i]),plt.xticks([]),plt.yticks([])plt.show()

在这里插入图片描述

转载地址:http://khben.baihongyu.com/

你可能感兴趣的文章
简简单单的分享2020常见的MySQL面试题MySQL与答案整理
查看>>
听说只有大厂的Android工程师才能全答对这20道题?我看你在吹牛哦!
查看>>
武功秘籍之 Redis 面试题全掌握,学完马上找面试官对线!
查看>>
50道!2020年!!MySQL高频数据库面试题解析,你都懂了吗?
查看>>
如何用Spring Boot加密配置文件中的特殊内容示例代码详解
查看>>
谈谈这些年面试官给大伙下的那些套,如何解?(面试技巧)
查看>>
5年开发经验的我被几条朋友圈打击到,点燃自己冲击阿里面经!
查看>>
5年工作经验的我放弃安逸,一份来自腾讯魔鬼面试的终极考验!
查看>>
学JAVA吗同学,这篇Sping boot 确定不了解下么?
查看>>
(3年+offer)华为技术岗面试初面+综合面试经验总结
查看>>
男默女泪,努力复习的我终于通过社招进入BAT工作了!(JAVA+JVM+框架+中间件+Spring干货分享)
查看>>
Python 导包
查看>>
dok_matrix
查看>>
theano 后端爆内存
查看>>
os.environ 和 keras.json
查看>>
后台面试经典问题-手写LRU算法
查看>>
Part-Guided Attention Learning for Vehicle Instance Retrieval
查看>>
Deep Residual Learning for Image Recognition
查看>>
Bag of Tricks and A Strong Baseline for Deep Person Re-identification
查看>>
vue+flask实现视频目标检测yolov5
查看>>