я попробовал технику вариаций hsv, двоичный порог, адаптивное удержание порога, canny, Собел и многие другие методы... я открыт для любых предложений
пожалуйста, мне нужна помощь в этом
-- кодирование: utf-8 --
Сначала импортируйте библиотеку
импортируйте pyrealsense2 как rs
Импортируйте Numpy для удобства манипулирование массивом
импортировать numpy как np
Импортировать OpenCV для удобного рендеринга изображений
импортировать cv2
Импортировать argparse для параметров командной строки
импортировать argparse
Импортировать os.path для манипуляций с путем к файлу
импортировать os.path
импортировать математические данные
из scipy.ndimage импортировать generic_filter
из времени импортировать сон
из Ultralytics импортировать SAM
Преобразовать 3D-точки из кадра глубины в цветной кадр
def deep_to_color(length_to_world, color_intrinsics, extrinsics):
# Преобразовать мировые 3D-координаты из кадра глубины в цветовая рамка
глубина_to_color = np.dot(extrinsics.rotation, deep_to_world[2]) + extrinsics.translation
Код: Выделить всё
# Convert the transformed 3D point to 2D color coordinates
color_point = rs.rs2_project_point_to_pixel(color_intrinsics, depth_to_color)
return color_pixel
# Нарисуйте основную линию между точками
thickness = 3
arrow_size = 30
cv2.line(изображение, p1, p2, цвет, толщина, cv2.LINE_AA)
Код: Выделить всё
# Calculate the midpoint
midpoint = ((p1[0] + p2[0]) // 2, (p1[1] + p2[1]) // 2)
# Draw the text at the midpoint
if x==1 :
draw_shadowed_text(image, text, (midpoint[0] , midpoint[1] +20), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 255), 2)
if x==2 :
draw_shadowed_text(image, text, (midpoint[0] - 100 , midpoint[1] - 0), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 255), 2)
if x==3 :
draw_shadowed_text(image, text, (midpoint[0] , midpoint[1] - 0), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 255), 2)
if x==4 :
draw_shadowed_text(image, text, (midpoint[0] , midpoint[1] - 0), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 255), 2)
# Draw the left arrow at p1
angle = np.arctan2(p1[1] - p2[1], p1[0] - p2[0])
arrow_p1_left = (int(p1[0] - arrow_size * np.cos(angle + np.pi / 6)),
int(p1[1] - arrow_size * np.sin(angle + np.pi / 6)))
arrow_p2_left = (int(p1[0] - arrow_size * np.cos(angle - np.pi / 6)),
int(p1[1] - arrow_size * np.sin(angle - np.pi / 6)))
cv2.line(image, p1, arrow_p1_left, color, thickness, cv2.LINE_AA)
cv2.line(image, p1, arrow_p2_left, color, thickness, cv2.LINE_AA)
# Draw the right arrow at p2
arrow_p1_right = (int(p2[0] + arrow_size * np.cos(angle + np.pi / 6)),
int(p2[1] + arrow_size * np.sin(angle + np.pi / 6)))
arrow_p2_right = (int(p2[0] + arrow_size * np.cos(angle - np.pi / 6)),
int(p2[1] + arrow_size * np.sin(angle - np.pi / 6)))
cv2.line(image, p2, arrow_p1_right, color, thickness, cv2.LINE_AA)
cv2.line(image, p2, arrow_p2_right, color, thickness, cv2.LINE_AA)
transparency=0.5
Код: Выделить всё
overlay = image.copy()
angle1 = np.arctan2(p1[1] - p2[1], p1[0] - p2[0])
angle2 = np.arctan2(p3[1] - p2[1], p3[0] - p2[0])
start_angle = int(np.degrees(angle1))
end_angle = int(np.degrees(angle2))
#Ensure the arc is drawn clockwise
if t==True :
#start_angle -= 360
start_angle = end_angle + 90
#start_angle = -1*start_angle +360
# Draw the filled arc
radius = 60
print(angle)
if 88
Подробнее здесь: [url]https://stackoverflow.com/questions/79358755/opencv-python-isolating-object[/url]
Мобильная версия