网站开发图片,网站开发有什么好的论坛,小程序拉新推广平台,网站建设需要摊销吗使用PythonOpenCV如何实现图像二值化发布时间#xff1a;2020-10-26 14:15:52来源#xff1a;亿速云阅读#xff1a;77作者#xff1a;蛋片鸡这篇文章运用简单易懂的例子给大家介绍使用PythonOpenCV如何实现图像二值化#xff0c;内容非常详细#xff0c;感兴趣的小伙伴们…使用PythonOpenCV如何实现图像二值化发布时间2020-10-26 14:15:52来源亿速云阅读77作者蛋片鸡这篇文章运用简单易懂的例子给大家介绍使用PythonOpenCV如何实现图像二值化内容非常详细感兴趣的小伙伴们可以参考借鉴希望对大家能有所帮助。简介图像二值化就是将图像上的像素点的灰度值设置为0或255也就是将整个图像呈现出明显的黑白效果的过程。普通图像二值化代码如下import cv2 as cvimport numpy as np#全局阈值def threshold_demo(image):gray cv.cvtColor(image, cv.COLOR_RGB2GRAY) #把输入图像灰度化#直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。ret, binary cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE)print(threshold value %s%ret)cv.namedWindow(binary0, cv.WINDOW_NORMAL)cv.imshow(binary0, binary)#局部阈值def local_threshold(image):gray cv.cvtColor(image, cv.COLOR_RGB2GRAY) #把输入图像灰度化#自适应阈值化能够根据图像不同区域亮度分布改变阈值binary cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY, 25, 10)cv.namedWindow(binary1, cv.WINDOW_NORMAL)cv.imshow(binary1, binary)#用户自己计算阈值def custom_threshold(image):gray cv.cvtColor(image, cv.COLOR_RGB2GRAY) #把输入图像灰度化h, w gray.shape[:2]m np.reshape(gray, [1,w*h])mean m.sum()/(w*h)print(mean:,mean)ret, binary cv.threshold(gray, mean, 255, cv.THRESH_BINARY)cv.namedWindow(binary2, cv.WINDOW_NORMAL)cv.imshow(binary2, binary)src cv.imread(E:/imageload/kobe.jpg)cv.namedWindow(input_image, cv.WINDOW_NORMAL) #设置为WINDOW_NORMAL可以任意缩放cv.imshow(input_image, src)threshold_demo(src)local_threshold(src)custom_threshold(src)cv.waitKey(0)cv.destroyAllWindows()运行结果注意1.全局阈值①OpenC的threshold函数进行全局阈值。其函数原型为threshold(src, thresh, maxval, type[, dst]) - retval, dstsrc参数表示输入图像(多通道8位或32位浮点)。thresh参数表示阈值。maxval参数表示与THRESH_BINARY和THRESH_BINARY_INV阈值类型一起使用设置的最大值。type参数表示阈值类型。retval参数表示返回的阈值。若是全局固定阈值算法则返回thresh参数值。若是全局自适应阈值算法则返回自适应计算得出的合适阈值。dst参数表示输出与src相同大小和类型以及相同通道数的图像。②type参数阈值类型这部分参考博客https://blog.csdn.net/iracer/article/details/49232703 写的很不错。阈值类型阈值类型图示③type参数单独选择上述五种阈值类型时是固定阈值算法效果比较差。此外还有自适应阈值算法(自适应计算合适的阈值而不是固定阈值)比如结合cv.THRESH_OTSU写成cv.THRESH_BINARY | cv.THRESH_OTSU。例子ret, binary cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) #大律法,全局自适应阈值,第二个参数值0可改为任意数字但不起作用。比如结合cv.THRESH_TRIANGLE写成cv.THRESH_BINARY | cv.THRESH_TRIANGLE。例子ret, binary cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE) #TRIANGLE法,全局自适应阈值,第二个参数值0可改为任意数字但不起作用适用于单个波峰。补cv.THRESH_OTSU和cv.THRESH_TRIANGLE也可单独使用不一定要写成和固定阈值算法结合的形式。单独写和结合起来写都是自适应阈值算法优先。例子ret, binary cv.threshold(gray, 0, 255, cv.THRESH_OTSU) #大律法 ret, binary cv.threshold(gray, 0, 255, cv.THRESH_TRIANGLE) #TRIANGLE法2.局部阈值OpenCV的adaptiveThreshold函数进行局部阈值。函数原型为adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) - dstsrc参数表示输入图像(8位单通道图像)。maxValue参数表示使用 THRESH_BINARY 和 THRESH_BINARY_INV 的最大值.adaptiveMethod参数表示自适应阈值算法平均 (ADAPTIVE_THRESH_MEAN_C)或高斯(ADAPTIVE_THRESH_GAUSSIAN_C)。thresholdType参数表示阈值类型必须为THRESH_BINARY或THRESH_BINARY_INV的阈值类型。blockSize参数表示块大小(奇数且大于1比如357........ )。C参数是常数表示从平均值或加权平均值中减去的数。 通常情况下这是正值但也可能为零或负值。补在使用平均和高斯两种算法情况下通过计算每个像素周围blockSize x blockSize大小像素块的加权均值并减去常量C即可得到自适应阈值。如果使用平均的方法则所有像素周围的权值相同如果使用高斯的方法则每个像素周围像素的权值则根据其到中心点的距离通过高斯方程得到。参考https://blog.csdn.net/guduruyu/article/details/680594503.numpy的reshape函数是给数组一个新的形状而不改变其数据函数原型reshape(a, newshape, orderC)a参数表示需要重新形成的原始数组。newshape参数表示int或int类型元组(tuple)若为(1, 3),表示生成的新数组是1行3列。order参数表表示使用此索引顺序读取a的元素并使用此索引顺序将元素放置到重新形成的数组中。函数返回值如果可能的话这将是一个新的视图对象; 否则它会成为副本。关于使用PythonOpenCV如何实现图像二值化就分享到这里了希望以上内容可以对大家有一定的帮助可以学到更多知识。如果觉得文章不错可以把它分享出去让更多的人看到。