38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
import cv2
|
||
import numpy as np
|
||
|
||
# 读取图像并将其转换为灰度图像
|
||
img = cv2.imread('image.png')
|
||
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
||
|
||
# 查找轮廓
|
||
contours, hierarchy = cv2.findContours(gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
|
||
|
||
# 绘制轮廓
|
||
for contour in contours:
|
||
# 计算轮廓长度
|
||
contour_length = cv2.arcLength(contour, True)
|
||
|
||
# 定义线条粗细的列表,使其从1到10逐渐增加
|
||
thickness_list = np.linspace(1, 10, len(contour))
|
||
|
||
# 遍历轮廓上的每个点,并在图像中绘制线条
|
||
for i, point in enumerate(contour):
|
||
# 计算当前点的线条粗细
|
||
thickness = int(thickness_list[i])
|
||
|
||
# 绘制线条
|
||
if i == 0:
|
||
# 如果是起点,线条粗细为1
|
||
cv2.circle(img, tuple(point[0]), 1, (0, 0, 255), -1)
|
||
else:
|
||
# 如果不是起点,线条粗细为thickness
|
||
prev_point = tuple(contour[i - 1][0])
|
||
curr_point = tuple(point[0])
|
||
cv2.line(img, prev_point, curr_point, (0, 0, 255), thickness)
|
||
|
||
# 显示图像
|
||
cv2.imshow('image', img)
|
||
cv2.waitKey(0)
|
||
cv2.destroyAllWindows()
|