我有一个手写文档的灰度图像。 我想通过应用8向CCL算法从此灰度图像中提取成分。请仅通过导入OpenCV和numpy提供python代码。如果有人可以完成此任务,我将设计一个不完整的代码,这对我非常有帮助。
以下是算法:
答案 0 :(得分:0)
有一种可能的方法与您尝试的相距不远。假设为背景像素分配了标签0,而为对象像素分配了值1。
逐行扫描图像;
遇到一个像素1时,设置一个新标签并执行泛洪填充操作,用新标签替换1。
可以很简单地实现洪水填充:
将起始像素设置为新标签;
递归填充八个邻居(如果它们的值为1)。
https://en.wikipedia.org/wiki/Flood_fill
此版本的代码非常简单。但是您会注意到,由于未完成填充的数量可能与图像大小一样大,因此它很容易溢出堆栈。
def FloodFill(X, Y, Label):
I[X,Y]= Label
for all 8-way neighbors (X'=X±1, Y'=Y±1, inside image):
if I[X',Y'] == 1:
FloodFill(X', Y', Label)
def CCL(Image I):
Label= 1
for Y in range(I.Height):
for X in range(I.Width):
if I[X, Y] == 1:
Label+= 1
FloodFill(X, Y, Label)
因此,我建议使用scanline版本,该版本涉及更多。