1. 程式人生 > 實用技巧 >python演算法庫

python演算法庫

1、輸入線段兩端點返回線段上所有點(直線方程)

 1 # 輸入一條直線兩端點,返回線上所有整數點座標,列表格式為[(x, y), ],順序按x從小到大排列
 2 def pointsOnLine(p1, p2):  # 直線點1, 直線點2
 3 
 4     x1, y1 = p1[0], p1[1]
 5     x2, y2 = p2[0], p2[1]
 6 
 7     if x1 == x2:  # 如果兩點x軸座標相同,則為垂直線上的所有點
 8         points = [(x1, y) for y in range(y2 if y1 > y2 else y1, y1 + 1 if
y1 > y2 else y2 + 1)] 9 return points 10 11 k = (y1 - y2) / (x1 - x2) # 直線斜率 12 b = y1 - (k*x1) # 直線截距 13 14 points = [] 15 XIter = [] 16 17 if x1 > x2: 18 XIter = range(x2, x1 + 1) 19 elif x1 < x2: 20 XIter = range(x1, x2 + 1) 21 22 for
x in iter(XIter): 23 y = int(k * x + b) # 直線方程 24 points.append((x, y)) 25 return points

2、opencv-python讀取圖片,增加紅色分量(可改寫成固定區域內的紅分量增強)

 1 # 增強圖片紅色分量
 2 def addRed(img):
 3     temp = img.copy()
 4     (cols, rows, channels) = img.shape
 5 
 6     for c in range(cols):
 7         #
print(col) 8 for r in range(rows): 9 # print(row) 10 R = img[c][r][2] 11 if R + 50 > 255: 12 temp[c][r][2] = 255 13 else: 14 temp[c][r][2] = R + 50 15 return temp

3、給線段兩端點排序(自己用的,很簡單)

 1 # 輸入一條線的[[x1, y1], [x2, y2]]這種格式,做一個簡單的判斷,重新擺放兩端點
 2 def setLine(line):  # [[x1, y1], [x2, y2]]  # 將線的兩端點,按照格式重新擺放
 3     if line[0][0] > line[1][0]:  # 做一些判斷,用來儲存點存放的規則,x值小的點放前面
 4         line.append(line[0])
 5         line[0] = line[1]
 6         line[1] = line[2]
 7         line.pop()
 8     elif line[0][0] == line[1][0]:
 9         if line[0][1] > line[1][1]:
10             line.append(line[0])
11             line[0] = line[1]
12             line[1] = line[2]
13             line.pop()
14     return line

4、