Canny
参考视频:canny边缘检测算法视频讲解
步骤
原图
1.RGB图片转灰度图片
代码
im = Image.open("nms.jpg")
im_gray = im.convert('L') #rgb转灰度图
结果
2.求梯度(sobel算子)
代码
grad = [[[0, 0] for i in range(im.size[0])] for j in range(im.size[1])] #170 * 200 * 2 每个像素点的梯度大小和方向
for j in range(1, im.size[1] - 1):
for i in range(1, im.size[0] - 1):
#x方向梯度
grad_x = im_list[j + 1][i + 1] + im_list[j - 1][i + 1] + 2 * im_list[j][i + 1] - \
im_list[j - 1][i - 1] - im_list[j + 1][i - 1] - 2 * im_list[j][i - 1]
#y方向梯度
grad_y = im_list[j + 1][i - 1] + im_list[j + 1][i + 1] + 2 * im_list[j + 1][i] - \
im_list[j - 1][i - 1] - im_list[j - 1][i + 1] - 2 * im_list[j - 1][i]
grad_x = math.floor(grad_x / 4)
grad_y = math.floor(grad_y / 4)
#合梯度
grad[j][i][0] = math.floor(math.sqrt(grad_x * grad_x + grad_y * grad_y))
if(grad[j][i][0] > 255):
grad[j][i][0] = 255
# if(grad[j][i][0] < 50):
# grad[j][i][0] = 0
#梯度方向
if(grad_x == 0):
grad[j][i][1] = 2 #y方向