__author__ = "WSX"
import cv2 as cv
import numpy as np
#-----------二值化(黑0和白 255)-------------
#二值化的方法(全局阈值 局部阈值(自适应阈值))
# OTSU
#cv.THRESH_BINARY 二值化
#cv.THRESH_BINARY_INV(黑白调换)
#cv.THRES_TRUNC 截断 def threshold(img): #全局阈值
gray = cv.cvtColor(img , cv.COLOR_BGR2GRAY) #首先变为灰度图
ret , binary = cv.threshold( gray , 0, 255 , cv.THRESH_BINARY |cv.THRESH_OTSU)#cv.THRESH_BINARY |cv.THRESH_OTSU 根据THRESH_OTSU阈值进行二值化 cv.THRESH_BINARY_INV(黑白调换)
#上面的0 为阈值 ,当cv.THRESH_OTSU 不设置则 0 生效
#ret 阈值 , binary二值化图像
print("阈值:", ret)
cv.imshow("binary", binary) def own_threshold(img): #自己设置阈值100 全局
gray = cv.cvtColor(img , cv.COLOR_BGR2GRAY) #首先变为灰度图
ret , binary = cv.threshold( gray , 100, 255 , cv.THRESH_BINARY )#cv.THRESH_BINARY |cv.THRESH_OTSU 根据THRESH_OTSU阈值进行二值化
#上面的0 为阈值 ,当cv.THRESH_OTSU 不设置则 0 生效
#ret 阈值 , binary二值化图像
print("阈值:", ret)
cv.imshow("binary", binary) def local_threshold(img): #局部阈值
gray = cv.cvtColor(img , cv.COLOR_BGR2GRAY) #首先变为灰度图
binary = cv.adaptiveThreshold( gray ,255 , cv.ADAPTIVE_THRESH_GAUSSIAN_C , cv.THRESH_BINARY, 25 , 10,)#255 最大值
#上面的 有两种方法ADAPTIVE_THRESH_GAUSSIAN_C (带权重的均值)和ADAPTIVE_THRESH_MEAN_C(和均值比较)
#blockSize 必须为奇数 ,c为常量(每个像素块均值 和均值比较 大的多余c。。。少于c)
#ret 阈值 , binary二值化图像
cv.imshow("binary", binary) def custom_threshold(img): #自己计算均值二值化
gray = cv.cvtColor(img , cv.COLOR_BGR2GRAY) #首先变为灰度图
h ,w = gray.shape[:2]
m = np.reshape( gray ,[1 ,w+h])
mean = m.sum() / w*h #求出均值
binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY )
cv.imshow("binary", binary) def main():
img = cv.imread("1.JPG")
cv.namedWindow("Show", cv.WINDOW_AUTOSIZE)
cv.imshow("Show", img)
#own_threshold(img)
own_threshold(img)
cv.waitKey(0)
cv.destroyAllWindows() main()

最新文章

  1. 读取xml文件报错:Invalid byte 2 of 2-byte UTF-8 sequence。
  2. Android基于mAppWidget实现手绘地图(八)–获取用户地理位置
  3. Theano2.1.12-基础知识之使用GPU
  4. PHP判断用户操作系统(Android,ipad,iphone,windows)
  5. [leetCode][001] Maximum Product Subarray
  6. Qt之Timers
  7. 第三百二十九天 how can I 坚持
  8. ACM竞赛 Java编程小结
  9. 查看Oracle执行计划的几种方法
  10. java实现字符串匹配问题之求两个字符串的最大公共子串
  11. popoverController(iPad)
  12. 无法删除MySql数据库,报错1010 error dropping
  13. 安卓模拟器tools修改
  14. 201521123122 《java程序设计》第八周实验总结
  15. Node.js 模块系统
  16. Activiti初学问题,求解
  17. Python_二叉树
  18. Asp.Net MVC Https设置
  19. 01c语言基础
  20. word用宏命令完美解决列表编号变黑块的问题

热门文章

  1. 组装恢复rbd
  2. Linux下Tomcat的启动和停止(包括杀死tomcat进程)
  3. Bresenham快速画直线算法
  4. Scala的Json序列化
  5. c#指定程序运行指定文件(太好了,终于找到了)
  6. 每天一道算法题(32)——输出数组中第k小的数
  7. Tornado模板配置
  8. shell直接退出后 后台进程关闭的原因和对处
  9. C++对ASCII文件的操作例子
  10. javascript 函数,事件