""" 点转图像测试程序,本程序是为在python海龟绘图中使用洪水填充而作的一个中间研究程序,作者李兴球. """ import cv2 import turtle import numpy as np def convert_turtle_xy(pos,w,h,img_w,img_h): """pos是以左上角为原点,向右为正x,向下为正y的坐标,函数把它转换成turtle坐标""" x,y = pos x = x - img_w//2 y = -y+ img_h//2 return x,y def points2image(points): """坐标点转换为灰图像,x->,y向下为正""" min_x = min([x for x,y in points]) max_x = max([x for x,y in points]) min_y = min([y for x,y in points]) max_y = max([y for x,y in points]) left,top = min_x,min_y width = max_x - min_x +1 height = max_y - min_y +1 image = [[255 for i in range(width)] for j in range(height)] new_points = [(x-left,y-top) for x,y in points] #print('new_points=',new_points) #for row in image: # print(row) for i in range(height): for j in range(width): if (j,i) in new_points: image[i][j] = 0 return image # 这些坐标点是以左上角为原点的,(x向右为正,y轴向下为正) A = (10,5);B=(10,200);C=(150,150);D=(200,100);E=(300,300);F=(330,330) ps = [A,B,C,D,E,F] img = points2image(ps) gray = np.array(img,dtype='uint8') print(gray) img_height,img_width = gray.shape[0:] # 高度、宽度 ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) print(gray) # 提取轮廓 contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) w,h = 800,900 turtle.setup(w,h) turtle.penup() turtle.speed(0) turtle.delay(0) for item in contours: cors = [convert_turtle_xy(tuple(lis[0]),w,h,img_width,img_height) for lis in item] cors.append(convert_turtle_xy(tuple(item[0][0]),w,h,img_width,img_height)) for x,y in cors: turtle.goto(x,y);turtle.dot() if not turtle.isdown():turtle.down() turtle.penup()
李兴球
李兴球的博客是Python创意编程原创博客
要发表评论,您必须先登录。
发表评论