您的位置:

Opencv二值化的详细介绍

一、 Opencv二值化函数

Opencv二值化是图像处理中的重要方法之一。它将一副灰度图像转换为二值图像,使每个像素只有两个可能的值:0(黑色)和255(白色)。Opencv函数cv::threshold()是实现二值化的关键函数。

    cv.threshold(src, dst, thresh, maxval, type)

参数说明:src为原始图像,dst为输出图像,thresh是阈值,maxval是输出图像中的最大值,type是二值化的类型。

二、 Opencv二值化尖锐

在进行二值化时,有些情况下需要尽量减小图像的噪点并保留边缘信息。这种情况下可以使用Otsu二值化方法或者自适应阈值方法如cv::adaptiveThreshold()。

其中,Otsu二值化方法在原始图像中找到一个阈值,使得各类之间的方差最大。它不仅可以通过cv::threshold()函数实现,还可以通过cv::threshold()函数的cv::THRESH_OTSU选项实现。

而自适应阈值是基于图像局部区域的灰度值计算阈值。它可以适应不同光照条件下的图像。其函数定义如下:

    cv.adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)

三、 Opencv二值化边缘图形

在边缘检测时,可以先对图像进行二值化处理,以使边缘更加明显。其中最常用的二值化方法为自动阈值二值化,比如Otsu二值化方法。如果要查找对象的轮廓,可以使用cv::findContours()函数。

    cv.findContours(binary_image, contours, hierarchy, mode, method, offset)

参数说明:binary_image是二值图像,contours是向量列表(每个元素存储一个包含对象边界点的向量),hierarchy是可选输出向量,mode是查找轮廓的模式,method是表示轮廓的近似方法,offset是轮廓坐标的偏移量。

四、 Opencv二值化图像

二值图像在处理数字、字母或其他形状的字符时非常有用。如果目标是从图像中提取这些字符,则需要先将图像转换为二进制图像(也称为二值图像)。可以通过setThreshold()函数手动设置阈值。在使用该函数时,需要先将图像灰度化,然后通过cv::threshold()函数进行二值化处理。

    img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    ret,thresh_img = cv.threshold(img_gray, 100, 255, cv.THRESH_BINARY) 

五、 Opencv二值化算法

Opencv支持的二值化算法有三种:全局阈值,自适应阈值和Otsu阈值。其中,全局阈值会针对整幅图像计算一个固定阈值,而自适应阈值会基于输入图像的局部区域计算阈值。Otsu阈值会自动选择一合适的阈值,以最合适的方式分离背景和前景。

六、 Opencv二值化代码

下面是一段Opencv二值化的示例代码:

    img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    ret,thresh_img = cv.threshold(img_gray, 100, 255, cv.THRESH_BINARY) 
    contours, hierarchy = cv.findContours(thresh_img,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)

七、 Opencv二值化阈值怎么设置

Opencv中二值化的阈值可以通过直方图和图像的处理结果来调整。通常,可以在试验阶段手动调整阈值值,直到取得最优结果。然而,设置阈值的关键点是要理解二值化背后的原理,明智地选择合适的方法极其重要。常见的选择方法有以下两种:

1)Otsu阈值:根据输入图像自动计算合适的阈值

    ret,thresh_img = cv.threshold(img_gray,0,255,cv.THRESH_BINARY+cv.THRESH_OTSU)

2)手动选择:根据实验观察,可以手动选择最佳阈值

    ret,thresh_img = cv.threshold(img_gray, threshold_value, max_value, threshold_type)

八、 Opencv二值化文字提取

二值化在文字图像处理中是重要的一步。文字二值化的目标是将文字上的线条更清楚地分离开来。可以使用Opencv的二值化方法进行文字提取。下面是一个文字提取的示例代码:

    img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    blurred_img = cv.GaussianBlur(img_gray, (5,5), 0)
    threshold_image = cv.adaptiveThreshold(blurred_img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,\
                                           cv.THRESH_BINARY,11,2)
    contours, hierarchy = cv.findContours(threshold_image,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)

文字提取需要进行多次处理,比如先进行图像模糊等预处理操作。最后再进行二值化处理时,可以选择自适应或Otsu等方法。此外,文字提取的关键是检测和捕获文字轮廓。这可以使用findContours()函数实现。