【OpenCV学习】阈值处理错误:error: (-215:Assertion failed) src.type() == CV_8UC1 in function ‘threshold‘
程序员文章站
2022-03-13 17:20:29
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar...
在使用cv2.threshold()函数对一幅图像进行阈值处理时出现了如下错误:error: (-215:Assertion failed) src.type() == CV_8UC1 in function ‘cv::threshold’
源代码如下所示:
import cv2
img = cv2.imread('lena.jpg')
t1 , thd = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
t2, Otsu = cv2.threshold(img,0 ,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow('thd',thd)
cv2.imshow('otsu',Otsu)
cv2.waitKey()
cv2.destroyAllWindows()
问题分析
cv2.threshold()函数是以单通道的形式输入图形,而我在上述的代码中的图像是以彩色三通道的形式输入,因此导致的错误。
解决方法
将彩色图片转变为单通道的灰度图片进行输入。
更改后的代码:
import cv2
img = cv2.imread('lena.jpg',0)
t1 , thd = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
t2, Otsu = cv2.threshold(img,0 ,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow('thd',thd)
cv2.imshow('otsu',Otsu)
cv2.waitKey()
cv2.destroyAllWindows()
不同的地方时在cv2.imread()函数中加入了一个参数0,使图片以单通道的灰度图像输入。
运行结果如下:
学习要点
*1.在本例中使用了Otsu方法进行阈值处理,Otsu方法可以根据当前图像给出最佳的类间分割阈值。过程是Otsu方法会遍历所有可能的阈值,从而找到最佳的阈值。
*2.在函数cv2.threshold()中对参数type的类型对传递一个参数“cv2.THRESH_OTSU”,即可实现Otsu方式的阈值分割。
*3.需要说明的是,在使用Otsu方法时,要把阈值设置为0,此时的函数cv2.threshold()会自动寻找最优阈值,并将该阈值返回。
本文地址:https://blog.csdn.net/weixin_42415138/article/details/107367142