我正在编写一个执行基本图像处理的程序。
请记住,图像是灰度的,而不是RGB,我也是Python的新手,所以解释我做错了什么/对,这将非常有帮助。
我正在尝试编写遵循这套规则的大纲算法:
原始图像中的所有亮像素必须为白色。 在轮廓图像中,图像边缘上的所有暗像素都必须为黑色。 如果不在图像边缘的像素是暗的并且所有8个周围像素都是暗的,则该像素位于形状的内部并且在轮廓图像中必须是白色的。 所有其他暗像素在轮廓图像中必须为黑色。
到目前为止,我有这个:
def outlines(image):
"""
Finds the outlines of shapes in an image. The parameter must be
a two-dimensional list of pixels. The return value is another
two-dimensional list of pixels which describes an image showing
outlines of the shapes in the original image. Each pixel in the
return value will be either black (0) or white (255).
"""
height=len(image)
width=len(image[0])
new_image=[]
for r in range(height):
new_row=[]
index=0
for c in range(width):
if image[r][c]>128:
new_row.append(255)
if image[r][c]<=128:
new_row.append(0])
new_image.append(new_row)
有人可以告诉我如何将算法实现到我的轮廓函数中吗?
提前致谢。 编辑:这是我的大学Comp Sci课程的作业,我不是要求别人做我的作业,而是因为我几乎不知道下一步是什么。 编辑2:如果有人能向我解释一个简单的边缘检测功能,它类似于我需要创建的算法,我将不胜感激。
答案 0 :(得分:1)
除了检查你的像素是暗还是清晰之外,你还应该在天黑时检查周围的其余像素是否也是黑暗的,以便使该点变为白色。
检查此功能并尝试将其用于此目的:
def all_are_dark_around(image, r, c):
# range gives the bounds [-1, 0, 1]
# you could use the list directly. Probably better for this especific case
for i in range(-1,2):
for j in range(-1,2):
# if the pixel is clear return False.
# note that image[r+0][c+0] is always dark by definition
if image[r+i][c+j] <= 128:
return False
#the loop finished -> all pixels in the 3x3 square were dark
return True
建议:
image[r][c]
或r
相等时,切勿检查c
到0
或height
或width
。也就是说,当检查的像素在
边界因为在这种情况下至少有一边在哪里
没有相邻的像素可以在图像中查看,你会得到
一个IndexError