import cv2
import numpy as npblockSize = 31
value = -1#count = 0  #液滴总数
area = 0  #单个液滴面积
min_area = 40
max_area = 1500#闭运算
def close(image):kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))iClose = cv2.morphologyEx(image,cv2.MORPH_CLOSE,kernel)return iClose#开运算
def open(image):kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(16,16))iOpen = cv2.morphologyEx(image,cv2.MORPH_OPEN,kernel)return iOpen#查找轮廓
def findConftours(srcImage,binary):contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)cv2.drawContours(srcImage,contours,-1,(0,0,255),3)#遍历所有的荧光区域,计数
def countAll(contours,image):global countcount = 0for i in range(np.size(contours)):area = cv2.contourArea(contours[i])  #计算闭合轮廓面积if (area < min_area) or (area > max_area):continueelse:count = count + 1(x,y),radius = cv2.minEnclosingCircle(contours[i])(x,y,radius) = np.int0((x,y,radius))cv2.circle(image,(x,y),radius,(0,0,255),2)return image,countdef cut():img = cv2.imread("E:/PythonWorkspace/yiingguang_image_process/images/1121.bmp")grayImage = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)img2 = img.copy()#ret, th1 = cv2.threshold(grayImage, 127, 255, cv2.THRESH_BINARY)# 第一个参数为原始图像矩阵,第二个参数为像素值上限,第三个是自适应方法(adaptive method):#                                              -----cv2.ADAPTIVE_THRESH_MEAN_C:领域内均值#                                              -----cv2.ADAPTIVE_THRESH_GAUSSIAN_C:领域内像素点加权和,权重为一个高斯窗口# 第四个值的赋值方法:只有cv2.THRESH_BINARY和cv2.THRESH_BINARY_INV# 第五个Block size:设定领域大小(一个正方形的领域)# 第六个参数C,阈值等于均值或者加权值减去这个常数(为0相当于阈值,就是求得领域内均值或者加权值)# 这种方法理论上得到的效果更好,相当于在动态自适应的调整属于自己像素点的阈值,而不是整幅图都用一个阈值#th2 = cv2.adaptiveThreshold(grayImage, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize, value)#th3 = cv2.adaptiveThreshold(grayImage, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize, value)th4 = cv2.adaptiveThreshold(grayImage, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, blockSize, value)#cv2.imshow('img', grayImage)#cv2.imshow('th1', th1)#cv2.imshow('th2', th2)#cv2.imshow('th3', th3)cv2.imshow('th4', th4)close_image = th4#去除噪声,形态学操作#闭运算iClose = close(close_image)cv2.imshow("close",iClose)#开运算后iOpen = open(iClose)cv2.imshow("close_and_open",iOpen)binary,contours,hirarchy = cv2.findContours(iOpen,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)print("所有的荧光区域:"+format(np.size(contours)))#显示轮廓res = cv2.drawContours(img,contours,-1,(0,0,255),2)#tmp = np.zeros(img.shape,np.uint8)#res = cv2.drawContours(tmp, contours, -1, (0, 0, 255), 2)cv2.imshow("cut_res",res)cv2.imwrite("adaptiveThreshold_cut_res.bmp",res)#绘制最小外接圆res,count = countAll(contours,img2)cv2.imshow("cirle_res",res)cv2.imwrite("adaptiveThreshold_cirle_res.bmp",res)print("筛选后的荧光亮点数:"+format(count))cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':cut()

python,opencv利用自适应阈值分割法实现微滴图像分割并计数相关推荐

  1. Python+OpenCV利用KNN背景分割器进行静态场景行人检测与轨迹跟踪

    前言 视频图像中的目标检测与跟踪,是计算机视觉的基础课题,同时具有广泛的应用价值.视觉目标(单目标)跟踪任务就是在给定某视频序列初始帧的目标大小与位置的情况下,预测后续帧中该目标的大小与位置.本篇文章 ...

  2. python+openCV 自适应阈值分割

    当图像各局部亮度不同时,全局阈值就很难将背景和目标分割.因此提出了自适应阈值,即在图像的不同区域采用不同的阈值进行分割.利用函数cv2.adaptiveThreshold()进行分割. cv2.ada ...

  3. 图像二值化方法及适用场景分析(OTSU Trangle 自适应阈值分割)

    图像二值化 应用场景 二值图像定义 阈值获取的方法 手动阈值法 自动阈值法 灰度均值法 基于直方图均值法 OTSU Triangle 自适应均值阈值分割方法 总结 参考文献 应用场景 二值图像处理与分 ...

  4. OpenCV自适应阈值分割函数:adaptiveThreshold()介绍

    OpenCV自适应阈值分割函数:adaptiveThreshold()介绍 [注意] 1. adaptiveThreshold()函数的ThresholdTypes参数只能设置为"CV_TH ...

  5. 【千律】OpenCV基础:图像阈值分割 -- 自适应阈值分割 -- 代码实现

    环境:Python3.8 和 OpenCV 内容:自适应阈值分割代码实现 import cv2 as cv import numpy as np import matplotlib.pyplot as ...

  6. 在OpenCV里实现自适应阈值分割

    在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所有的信息提供保留.实验室环境下,相应的素材是模板化的,但是将实验室方法应用于现实环境中时,我们会发现光影环境对于效果的影 ...

  7. otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用

    from:http://blog.csdn.net/onezeros/article/details/6136770 otsu算法选择使类间方差最大的灰度值为阈值,具有很好的效果 算法具体描述见ots ...

  8. Python OpenCV GrabCut进行前景分割和提取

    Python OpenCV GrabCut进行前景分割和提取 1. 效果图 1.1 边界框GrabCut效果图 1.2 Mask GrabCut效果图 2. GrabCut原理 2.1 GrabCut ...

  9. 交叉熵图像分割matlab,灰度图像的二维交叉熵阈值分割法

    [1]SAHOO P K,SOLTANIS,WONG A K C,et al.A survey of thresholding techniques[J].Computer Vision,Graphi ...

  10. python opencv 利用分水岭算法实现对物体的分割 图文详细注释版 以分割官网提供的硬币为例

    分水岭算法可以实现自动分割多个物体,opencv中 cv.watershed() 函数实现了分水岭算法 话不多说,上代码 # 利用分水岭算法分离多个相同硬币 import numpy as np im ...

最新文章

  1. ubuntu字符界面login_Ubuntu字符界面输入密码始终提示错误 login incorrect 解决办法...
  2. 01XC-1: 动态规划
  3. Cortex系列ARM内核介绍
  4. 将windows下编辑好的文件(GBK)转换成Linux下的格式(UTF8)
  5. 【JAVA 第三章 流程控制语句】课后习题 编写判断从键盘输入的字符串是否为回文
  6. [Ext JS 7]7.4 样式主题(Theme)
  7. Java 8并发工具包简介
  8. python不好用_Python用不好?看官方中文文档啦
  9. 计算机课怎么管纪律,浅谈如何巧妙设置学生机轻松管理机房课堂纪律
  10. 学生HTML个人网页作业作品:基于web在线汽车网站的设计与实现 (宝马轿车介绍)
  11. Unity【HTC Vive Noitom】- 关于动作捕捉的两种解决方案
  12. 测序技术的一些原理理解(sanger测序与illumina测序)
  13. Vue动态渲染本地图片
  14. 细胞衰老——酪氨酸激酶抑制剂
  15. 安卓TextView实现文字跑马灯(失去焦点可用)
  16. Science:已“死亡”的细菌仍能感知来自环境的信息
  17. 老九学堂 学习C++ 第十天
  18. 申请支付宝授权,提现测试环境步骤
  19. 微信小程序1-配置文件
  20. 安卓图案解锁NC13585

热门文章

  1. unity 阳光插件_【复盘】Environmental Composition初尝试总结(附实用插件推荐)
  2. icem网格划分如何给内部面网格,ICEM CFD处理混合网格划分中低质量的问题
  3. 电脑小技巧:怎么设置默认浏览器
  4. TBS 腾讯浏览服务(X5WebView) 集成指南
  5. oracle中索引的类型,oracle索引类型normal
  6. 看拉扎维《模拟CMOS集成电路设计》的一些总结和思考(十)——稳定性与频率补偿
  7. 场景应用:100亿的数据你怎么排序
  8. linux-centos8安装oracle11
  9. ArcGIS实验教程:ArcGIS 10.2手把手图文安装教程(经典版)
  10. 计算机没有显示光盘图标,电脑光驱图标不见了怎么办