在本教程中,我们将介绍图像和视频分析的阈值处理。阈值化的思想是进一步简化可视化数据进行分析。首先,您可以转换为灰度,但随后您必须考虑到灰度仍然至少有255个值。最基本的阈值函数是根据阈值将所有内容转换为白色或黑色。假设我们想要一个125的阈值(总共255),然后将低于125的所有内容转换为0或黑色,将高于125的所有内容转换为255或白色。如果你像平常一样转换为灰度,你会得到白色和黑色。如果您不转换为灰度,您将获得阈值图片,但带有颜色。虽然这听起来不错,但事实并非如此。我们将在这里通过几个示例和不同类型阈值的解释。我们将使用下图作为示例图像,但也可以使用您自己的图像:书中的简介就是一个很好的例子,首先,背景实际上根本不是白色的,一切都是暗淡的,但一切都是多变的。有些部分颜色较浅,易于阅读,而另一些部分颜色较深,需要集中注意力。首先,让我们尝试一个简单的阈值:retval,threshold=cv2.threshold(img,10,255,cv2.THRESH_BINARY)二进制阈值是一个简单的“或”阈值,其中像素为255或0。在许多情况下,此阈值是白色或黑色,但我们暂时保留图像的颜色,所以它可能仍然是彩色的。这里的第一个参数是图像。下一个参数是阈值,我们选择10。下一个是最大值,我们选择255。最后是阈值类型,我们选择THRESH_BINARY。一般来说,选择10作为阈值有些困难。我们选择10,因为这是一张低光图片,所以我们选择一个较低的数字。通常,125-150左右效果最好。importcv2importnumpyasnpimg=cv2.imread('linuxidc.com.jpg')retval,threshold=cv2.threshold(img,12,255,cv2.THRESH_BINARY)cv2.imshow('原始',img)cv2.imshow('阈值',阈值)cv2.waitKey(0)cv2.destroyAllWindows()结果:现在,图像看起来稍微好一点了,但还是有点乱。从视觉上看,这是更好的方法,但仍然很难用程序对其进行分析。让我们看看是否可以进一步简化它。首先,让我们对图像进行灰度化,然后设置阈值:importcv2importnumpyasnpgrayscaled=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)retval,threshold=cv2.threshold(grayscaled,10,255,cv2.THRESH_BINARY)cv2.imshow('original',img)cv2.imshow('threshold',threshold)cv2.waitKey(0)cv2.destroyAllWindows()结果:是的,更简单,但我们仍然缺少很多上下文。接下来,我们可以尝试自适应阈值,它会尝试改变阈值并有望解决扭曲的页面。importcv2importnumpyasnpimg=cv2.imread('www.linuxidc.com.jpg')grayscaled=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)th=cv2.adaptiveThreshold(灰度化,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_15BINAimRY),cv2.('original',img)cv2.imshow('Adaptivethreshold',th)cv2.waitKey(0)cv2.destroyAllWindows()结果如下:还有一个可执行的阈值版本叫大津阈值(OtsuThreshold)。它在这里播放得不好,但是:importcv2importnumpyasnpimg=cv2.imread('1.jpg')grayscaled=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)retval2,threshold2=cv2.threshold(grayscaled,125,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)cv2.imshow('original',img)cv2.imshow('Otsuthreshold',threshold2)cv2.waitKey(0)cv2.destroyAllWindows()结果如下:
