opencvhsv阈值分割函数,python中opencv
阈值分割法是一种基于区域的图像分割技术,原理是把图像像素点分为若干类。本文将利用Python OpenCV实现阈值分割,感兴趣的可以了解一下
目录
一、全局阈值1.效果图2.源码二、滑动改变阈值(滑动条)1.效果图2.源码三、自适应阈值分割1.效果图2.源码3.高斯布朗勒函数去噪四、参数解释
一、全局阈值
原图:
整幅图采用一个阈值,与图片的每一个像素灰度进行比较,重新赋值;
1.效果图
2.源码
导入cv2
将matplotlib.pyplot作为血小板计数导入
#设定阈值
阈值=130
#载入原图,并转化为灰度图像
img _原始=cv2。im read(r e : py python 3.7 test 2 test 14于之 cell。png ,0)
img _原始=cv2。resize(img _ original,(0,0),fx=0.3,fy=0.3)
#采用5种阈值类型(阈值类型)分割图像
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 .TRUNC)
retval4,img _ to zero=cv2。threshold(img _ original,thresh,255,cv2 .THRESH_TOZERO)
retval5,img _ to zero _ 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]
对于范围(6):中的我
情节子情节(2,3,11)
plt.imshow(imgs[i],灰色)
工厂名称(标题[我])
plt.xticks([])
plt.yticks([])
plt.show()
二、滑动改变阈值(滑动条)
1.效果图
2.源码
代码如下(示例):
导入cv2
将数组作为铭牌导入
将matplotlib.pyplot作为血小板计数导入
#载入原图,转化为灰度图像,并通过cv2.resize()等比调整图像大小
img _原始=cv2。im read(r e : py python 3.7 test 2 test 14于之 cell。png ,0)
img _原始=cv2。resize(img _ original,(0,0),fx=0.3,fy=0.3)
#初始化阈值,定义全局变量毕业生
人工全髋关节置换术
esh=130
imgs=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)
#新建滑动条,初始位置为130
cv2.createTrackbar(threshold value,Images,130,255,threshold_segmentation)
#第一次调用函数
threshold_segmentation(thresh)
#显示图像
while(1):
cv2.imshow(Images,imgs)
if cv2.waitKey(1)==ord(q):
break
cv2.destroyAllWindows()
三、自适应阈值分割
1.效果图
2.源码
代码如下(示例):
import cv2
3.GaussianBlur()函数去噪
代码如下(示例):
import cv2
四、参数解释
1.cv2.threshold(src, thresh, maxval, type)
参数:
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实现阈值分割的方法详解的详细内容,更多关于Python OpenCV阈值分割的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。