图像处理区域,以根据其相应的亮度级别对区域进行分割

时间:2019-09-03 19:42:21

标签: opencv image-processing computer-vision

对于以下所示图像,某些区域的亮度不同。例如,我用红色圆圈标记了两个区域,即3和4;并使用箭头指向两个小区域,即1和2。可以根据各自的亮度级别对区域进行分割的图像处理算法是什么?我还想计算这些不同区域的面积。

enter image description here

1 个答案:

答案 0 :(得分:0)

您只能在图像区域上使用Otsu阈值。 首先,通过阈值化只能获得图像的前景(无黑色背景)。然后,您可以使用Otsu alogrithm计算非零值的阈值。然后使用该值对图像进行阈值处理。

src = cv.imread(image_path)

#convert to gray scale
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) 

#thresholding to find only white region of image, without black backgorund
ret3, th3 = cv.threshold(gray, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)

#erosion to delet some noises
cv.erode(th3, np.ones((5, 5), np.uint8), 1)

#get all values from image that are not equal 0 (are not background)
tempThresImg = gray[th3 != 0]

#get threshold value only for not black pixels
threshold, temp = cv.threshold(tempThresImg, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)  # using otsu threshold

#use threshold value on whole image
ret, thresh = cv.threshold(gray, threshold, 255, cv.THRESH_BINARY)

我的结果(带有您的箭头)

阈值获得前景后: After thresholding to get foreground

结果: Result

您可以更改阈值以获得结果,具体取决于算法检测到的是太多还是太少。