import numpy as np import cv2 # Load image img = cv2.imread("input.jpg") # Convert to grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Detect edges edges = cv2.Canny(gray, 100, 200) # Display image with edges cv2.imshow("Image with Edges", edges) # Select edge points using a mouse click points = [] def select_point(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: points.append((x, y)) cv2.namedWindow("Select Points") cv2.setMouseCallback("Select Points", select_point) while True: cv2.imshow("Select Points", img) key = cv2.waitKey(1) if key == ord("q"): break # Generate TSP art and tsplib dataset n = len(points) distances = np.zeros((n, n)) for i in range(n): for j in range(n): if i != j: distances[i][j] = np.sqrt((points[i][0] - points[j][0]) ** 2 + (points[i][1] - points[j][1]) ** 2) # Write tsplib dataset with open("output.tsp", "w") as f: f.write("NAME: output\n") f.write("TYPE: TSP\n") f.write("DIMENSION: {}\n".format(n)) f.write("EDGE_WEIGHT_TYPE: EUC_2D\n") f.write("NODE_COORD_SECTION\n") for i in range(n): f.write("{} {} {}\n".format(i+1, points[i][0], points[i][1])) f.write("EOF\n") # Display TSP art tsp_art = np.zeros_like(gray) path = list(range(n)) + [0] for i in range(n): cv2.line(tsp_art, points[path[i]], points[path[i+1]], (255, 255, 255), thickness=1) cv2.imshow("TSP Art", tsp_art) cv2.waitKey(0) cv2.destroyAllWindows()这段代码没有输出rsplib数据集
时间: 2023-06-17 18:08:29 浏览: 45
这段代码确实生成了一个tsplib数据集,并将其写入文件"output.tsp"中。在这段代码中,第25-35行的代码生成了一个n x n的距离矩阵,其中distances[i][j]表示点i和点j之间的欧几里得距离。然后,第38-48行的代码使用这个距离矩阵来生成tsplib数据集,并将其写入文件"output.tsp"中。
你可以在代码的最后几行看到,它通过cv2.imshow()函数显示了生成的TSP图像。
相关问题
把这段代码改成自动选点的import numpy as np import cv2 # Load image img = cv2.imread("input.jpg") # Convert to grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Detect edges edges = cv2.Canny(gray, 100, 200) # Display image with edges cv2.imshow("Image with Edges", edges) # Select edge points using a mouse click points = [] def select_point(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: points.append((x, y)) cv2.namedWindow("Select Points") cv2.setMouseCallback("Select Points", select_point) while True: cv2.imshow("Select Points", img) key = cv2.waitKey(1) if key == ord("q"): break # Generate TSP art and tsplib dataset n = len(points) distances = np.zeros((n, n)) for i in range(n): for j in range(n): if i != j: distances[i][j] = np.sqrt((points[i][0] - points[j][0]) ** 2 + (points[i][1] - points[j][1]) ** 2) # Write tsplib dataset with open("output.tsp", "w") as f: f.write("NAME: output\n") f.write("TYPE: TSP\n") f.write("DIMENSION: {}\n".format(n)) f.write("EDGE_WEIGHT_TYPE: EUC_2D\n") f.write("NODE_COORD_SECTION\n") for i in range(n): f.write("{} {} {}\n".format(i+1, points[i][0], points[i][1])) f.write("EOF\n") # Display TSP art tsp_art = np.zeros_like(gray) path = list(range(n)) + [0] for i in range(n): cv2.line(tsp_art, points[path[i]], points[path[i+1]], (255, 255, 255), thickness=1) cv2.imshow("TSP Art", tsp_art) cv2.waitKey(0) cv2.destroyAllWindows()
import numpy as np
import cv2
# Load image
img = cv2.imread("input.jpg")
# Convert to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Detect edges
edges = cv2.Canny(gray, 100, 200)
# Display image with edges
cv2.imshow("Image with Edges", edges)
# Select edge points using a mouse click
points = []
def select_point(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
points.append((x, y))
cv2.circle(img, (x,y), 3, (0,0,255), -1)
cv2.namedWindow("Select Points")
cv2.setMouseCallback("Select Points", select_point)
while True:
cv2.imshow("Select Points", img)
key = cv2.waitKey(1)
if key == ord("q"):
break
# Generate TSP art and tsplib dataset
n = len(points)
distances = np.zeros((n, n))
for i in range(n):
for j in range(n):
if i != j:
distances[i][j] = np.sqrt((points[i][0] - points[j][0]) ** 2 + (points[i][1] - points[j][1]) ** 2)
# Write tsplib dataset
with open("output.tsp", "w") as f:
f.write("NAME: output\n")
f.write("TYPE: TSP\n")
f.write("DIMENSION: {}\n".format(n))
f.write("EDGE_WEIGHT_TYPE: EUC_2D\n")
f.write("NODE_COORD_SECTION\n")
for i in range(n):
f.write("{} {} {}\n".format(i+1, points[i][0], points[i][1]))
f.write("EOF\n")
# Display TSP art
tsp_art = np.zeros_like(gray)
path = list(range(n)) + [0]
for i in range(n):
cv2.line(tsp_art, points[path[i]], points[path[i+1]], (255, 255, 255), thickness=1)
cv2.imshow("TSP Art", tsp_art)
cv2.waitKey(0)
cv2.destroyAllWindows()
将这段代码改成自动选取一定数量的点import numpy as np import cv2 # Load image img = cv2.imread("input.jpg") # Convert to grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Detect edges edges = cv2.Canny(gray, 100, 200) # Display image with edges cv2.imshow("Image with Edges", edges) # Select edge points using a mouse click points = [] def select_point(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: points.append((x, y)) cv2.namedWindow("Select Points") cv2.setMouseCallback("Select Points", select_point) while True: cv2.imshow("Select Points", img) key = cv2.waitKey(1) if key == ord("q"): break # Generate TSP art and tsplib dataset n = len(points) distances = np.zeros((n, n)) for i in range(n): for j in range(n): if i != j: distances[i][j] = np.sqrt((points[i][0] - points[j][0]) ** 2 + (points[i][1] - points[j][1]) ** 2) # Write tsplib dataset with open("output.tsp", "w") as f: f.write("NAME: output\n") f.write("TYPE: TSP\n") f.write("DIMENSION: {}\n".format(n)) f.write("EDGE_WEIGHT_TYPE: EUC_2D\n") f.write("NODE_COORD_SECTION\n") for i in range(n): f.write("{} {} {}\n".format(i+1, points[i][0], points[i][1])) f.write("EOF\n") # Display TSP art tsp_art = np.zeros_like(gray) path = list(range(n)) + [0] for i in range(n): cv2.line(tsp_art, points[path[i]], points[path[i+1]], (255, 255, 255), thickness=1) cv2.imshow("TSP Art", tsp_art) cv2.waitKey(0) cv2.destroyAllWindows()
这里是将代码修改为自动选取一定数量的点的示例代码:
import numpy as np
import cv2
# Load image
img = cv2.imread("input.jpg")
# Convert to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Detect edges
edges = cv2.Canny(gray, 100, 200)
# Display image with edges
cv2.imshow("Image with Edges", edges)
# Automatically select edge points using HoughLines method
lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=100,
minLineLength=50, maxLineGap=10)
points = []
for line in lines:
x1, y1, x2, y2 = line[0]
points.append((x1, y1))
points.append((x2, y2))
# Generate TSP art and tsplib dataset
n = len(points)
distances = np.zeros((n, n))
for i in range(n):
for j in range(n):
if i != j:
distances[i][j] = np.sqrt((points[i][0] - points[j][0]) ** 2 + (points[i][1] - points[j][1]) ** 2)
# Write tsplib dataset
with open("output.tsp", "w") as f:
f.write("NAME: output\n")
f.write("TYPE: TSP\n")
f.write("DIMENSION: {}\n".format(n))
f.write("EDGE_WEIGHT_TYPE: EUC_2D\n")
f.write("NODE_COORD_SECTION\n")
for i in range(n):
f.write("{} {} {}\n".format(i+1, points[i][0], points[i][1]))
f.write("EOF\n")
# Display TSP art
tsp_art = np.zeros_like(gray)
path = list(range(n)) + [0]
for i in range(n):
cv2.line(tsp_art, points[path[i]], points[path[i+1]], (255, 255, 255), thickness=1)
cv2.imshow("TSP Art", tsp_art)
cv2.waitKey(0)
cv2.destroyAllWindows()
这个修改后的代码使用 HoughLinesP 方法自动选择边缘点,以代替手动选择点的步骤。