├── .idea
├── .gitignore
├── Python.iml
├── inspectionProfiles
│ └── profiles_settings.xml
├── misc.xml
└── modules.xml
├── README.md
├── image
├── high
│ ├── 174941.jpg
│ ├── 175112.jpg
│ ├── 175145.jpg
│ ├── 175231.jpg
│ ├── 175319.jpg
│ ├── 175404.jpg
│ ├── 175453.jpg
│ ├── 175522.jpg
│ ├── 175919.jpg
│ ├── 175941.jpg
│ ├── 180117.jpg
│ ├── 180214.jpg
│ ├── 180315.jpg
│ └── 180353.jpg
└── low
│ ├── 174937.jpg
│ ├── 175139.jpg
│ ├── 175224.jpg
│ ├── 175314.jpg
│ ├── 175400.jpg
│ ├── 175446.jpg
│ ├── 175515.jpg
│ ├── 175913.jpg
│ ├── 175936.jpg
│ ├── 180020.jpg
│ ├── 180214.jpg
│ ├── 180315.jpg
│ └── 180353.jpg
├── main.py
├── result
├── bin
│ ├── 174937.jpg
│ ├── 175139.jpg
│ ├── 175224.jpg
│ ├── 175314.jpg
│ ├── 175400.jpg
│ ├── 175446.jpg
│ ├── 175515.jpg
│ ├── 175913.jpg
│ ├── 175936.jpg
│ ├── 180020.jpg
│ ├── 180214.jpg
│ ├── 180315.jpg
│ └── 180353.jpg
├── c
│ ├── 174937.jpg
│ ├── 175139.jpg
│ ├── 175224.jpg
│ ├── 175314.jpg
│ ├── 175400.jpg
│ ├── 175446.jpg
│ ├── 175515.jpg
│ ├── 175913.jpg
│ ├── 175936.jpg
│ ├── 180020.jpg
│ ├── 180214.jpg
│ ├── 180315.jpg
│ └── 180353.jpg
├── e
│ ├── 174937.jpg
│ ├── 175139.jpg
│ ├── 175224.jpg
│ ├── 175314.jpg
│ ├── 175400.jpg
│ ├── 175446.jpg
│ ├── 175515.jpg
│ ├── 175913.jpg
│ ├── 175936.jpg
│ ├── 180020.jpg
│ ├── 180214.jpg
│ ├── 180315.jpg
│ └── 180353.jpg
├── edges
│ ├── 174937.jpg
│ ├── 175139.jpg
│ ├── 175224.jpg
│ ├── 175314.jpg
│ ├── 175400.jpg
│ ├── 175446.jpg
│ ├── 175515.jpg
│ ├── 175913.jpg
│ ├── 175936.jpg
│ ├── 180020.jpg
│ ├── 180214.jpg
│ ├── 180315.jpg
│ └── 180353.jpg
├── end
│ ├── 26817_175314.jpg
│ ├── 26895_175224.jpg
│ ├── 27056_180315.jpg
│ ├── 28187_180353.jpg
│ ├── 28245_175400.jpg
│ ├── 28364_175515.jpg
│ ├── 29411_175139.jpg
│ ├── 29774_180214.jpg
│ ├── 29803_175936.jpg
│ ├── 32804_175446.jpg
│ ├── 32945_175913.jpg
│ ├── 33298_174937.jpg
│ └── 35899_180020.jpg
├── input image
│ ├── 174937.jpg
│ ├── 175139.jpg
│ ├── 175224.jpg
│ ├── 175314.jpg
│ ├── 175400.jpg
│ ├── 175446.jpg
│ ├── 175515.jpg
│ ├── 175913.jpg
│ ├── 175936.jpg
│ ├── 180020.jpg
│ ├── 180214.jpg
│ ├── 180315.jpg
│ └── 180353.jpg
├── line_detect
│ ├── 174937.jpg
│ ├── 175139.jpg
│ ├── 175224.jpg
│ ├── 175314.jpg
│ ├── 175400.jpg
│ ├── 175446.jpg
│ ├── 175515.jpg
│ ├── 175913.jpg
│ ├── 175936.jpg
│ ├── 180020.jpg
│ ├── 180214.jpg
│ ├── 180315.jpg
│ └── 180353.jpg
└── re
│ ├── 174937.jpg
│ ├── 175139.jpg
│ ├── 175224.jpg
│ ├── 175314.jpg
│ ├── 175400.jpg
│ ├── 175446.jpg
│ ├── 175515.jpg
│ ├── 175913.jpg
│ ├── 175936.jpg
│ ├── 180020.jpg
│ ├── 180214.jpg
│ ├── 180315.jpg
│ └── 180353.jpg
├── test.jpg
├── test.py
├── test1.jpg
└── test2.jpg
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 | # Datasource local storage ignored files
7 | /dataSources/
8 | /dataSources.local.xml
9 |
--------------------------------------------------------------------------------
/.idea/Python.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MachineVisionEdgeDamageDefectDetection
2 | 机器视觉边缘破损缺陷检测
3 | 摘要:垫片是在机械生产过程中重要组成零件之一,其在生产过程中所产生边缘缺陷和破损会严重影响生产过程。目前国内的垫片边缘破损缺陷检测主要以人力为主,但因工作量大、检测速度较低、人眼易疲劳等问题,不仅限制底板零件的产出还会造成零件缺陷的误判,影响后续的使用。为此,本文提出一种基于机器视觉的垫片边缘破损缺陷自动检测方案。该方案对目标的小幅位移和旋转不敏感,同时通过设计一种基于模板匹配的缺陷检测方案兼顾了检测精度和处理效率。
4 |
5 | 关键词:缺陷检测,机器视觉,模板匹配
6 |
7 | 
8 | 
9 |
--------------------------------------------------------------------------------
/image/high/174941.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/174941.jpg
--------------------------------------------------------------------------------
/image/high/175112.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/175112.jpg
--------------------------------------------------------------------------------
/image/high/175145.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/175145.jpg
--------------------------------------------------------------------------------
/image/high/175231.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/175231.jpg
--------------------------------------------------------------------------------
/image/high/175319.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/175319.jpg
--------------------------------------------------------------------------------
/image/high/175404.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/175404.jpg
--------------------------------------------------------------------------------
/image/high/175453.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/175453.jpg
--------------------------------------------------------------------------------
/image/high/175522.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/175522.jpg
--------------------------------------------------------------------------------
/image/high/175919.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/175919.jpg
--------------------------------------------------------------------------------
/image/high/175941.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/175941.jpg
--------------------------------------------------------------------------------
/image/high/180117.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/180117.jpg
--------------------------------------------------------------------------------
/image/high/180214.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/180214.jpg
--------------------------------------------------------------------------------
/image/high/180315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/180315.jpg
--------------------------------------------------------------------------------
/image/high/180353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/high/180353.jpg
--------------------------------------------------------------------------------
/image/low/174937.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/174937.jpg
--------------------------------------------------------------------------------
/image/low/175139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/175139.jpg
--------------------------------------------------------------------------------
/image/low/175224.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/175224.jpg
--------------------------------------------------------------------------------
/image/low/175314.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/175314.jpg
--------------------------------------------------------------------------------
/image/low/175400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/175400.jpg
--------------------------------------------------------------------------------
/image/low/175446.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/175446.jpg
--------------------------------------------------------------------------------
/image/low/175515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/175515.jpg
--------------------------------------------------------------------------------
/image/low/175913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/175913.jpg
--------------------------------------------------------------------------------
/image/low/175936.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/175936.jpg
--------------------------------------------------------------------------------
/image/low/180020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/180020.jpg
--------------------------------------------------------------------------------
/image/low/180214.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/180214.jpg
--------------------------------------------------------------------------------
/image/low/180315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/180315.jpg
--------------------------------------------------------------------------------
/image/low/180353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/image/low/180353.jpg
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | """
2 | design by lx497
3 | 2022.12.25
4 | """
5 | import math
6 | import os
7 |
8 | import cv2
9 | import numpy as np
10 | from matplotlib import pyplot as plt
11 |
12 | name = ""
13 | end_image_root = "result\\"
14 |
15 | def add_xy(add_lines):
16 | """
17 | 增加点数,进行拟合,让长度长的直线,权重更大
18 | :param add_lines:
19 | :return:
20 | """
21 | for line in add_lines:
22 | x1, y1, x2, y2 = line
23 | r = pow(pow(x1 - x2, 2) + pow(y1 - y2, 2), 0.5)
24 | if r < 50:
25 | continue
26 | xy_list = []
27 | if x2 - x1 == 0:
28 | print("直线是竖直的")
29 | if y2 > y1:
30 | max_y = y2
31 | min_y = y1
32 | else:
33 | min_y = y2
34 | max_y = y1
35 | while min_y < max_y:
36 | min_y = min_y + 40
37 | xy_list.append([x1, min_y])
38 |
39 | elif y2 - y1 == 0:
40 | print("直线是水平的")
41 | if x2 > x1:
42 | max_x = x2
43 | min_x = x1
44 | else:
45 | min_x = x2
46 | max_x = x1
47 | while min_x < max_x:
48 | min_x = min_x + 40
49 | xy_list.append([min_x, y1])
50 |
51 | else:
52 | # 计算斜率
53 | k = -(y2 - y1) / (x2 - x1)
54 | b = y1 - k * x1
55 | # 求反正切,再将得到的弧度转换为度
56 | result_a = np.arctan(k) * 57.29577
57 | if -45 < result_a < 45:
58 | if x2 > x1:
59 | max_x = x2
60 | min_x = x1
61 | else:
62 | min_x = x2
63 | max_x = x1
64 | while min_x < max_x:
65 | min_x = min_x + 40
66 | xy_list.append([min_x, int(k * min_x + b)])
67 | else:
68 | if y2 > y1:
69 | max_y = y2
70 | min_y = y1
71 | else:
72 | min_y = y2
73 | max_y = y1
74 | while min_y < max_y:
75 | min_y = min_y + 40
76 | xy_list.append([int((y1 - b) / k), min_y])
77 | return xy_list
78 |
79 |
80 | def line_detect(image):
81 | img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
82 | line_vertical = []
83 | line_horizontal = []
84 |
85 | ret2, th2 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
86 |
87 | kernel = np.ones((10, 10), np.uint8)
88 | # 3图像的开闭运算
89 | cv0pen = cv2.morphologyEx(th2, cv2.MORPH_OPEN, kernel) # 开运算
90 |
91 | edges = cv2.Canny(cv0pen, 50, 150, apertureSize=3)
92 |
93 | # 显示图片
94 | cv2.imwrite(end_image_root+"edges\\"+name, edges)
95 | # 检测白线 这里是设置检测直线的条件,可以去读一读HoughLinesP()函数,然后根据自己的要求设置检测条件
96 | lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 40, minLineLength=10, maxLineGap=10)
97 | i = 1
98 | # 对通过霍夫变换得到的数据进行遍历
99 | for line in lines:
100 | # newlines1 = lines[:, 0, :]
101 | # print("line[" + str(i - 1) + "]=", line)
102 | x1, y1, x2, y2 = line[0] # 两点确定一条直线,这里就是通过遍历得到的两个点的数据 (x1,y1)(x2,y2)
103 | cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2) # 在原图上画线
104 | # 转换为浮点数,计算斜率
105 | x1 = float(x1)
106 | x2 = float(x2)
107 | y1 = float(y1)
108 | y2 = float(y2)
109 | # print("x1=%s,x2=%s,y1=%s,y2=%s" % (x1, x2, y1, y2))
110 | if x2 - x1 == 0:
111 | # print("直线是竖直的")
112 |
113 | line_vertical.append(line[0])
114 |
115 | elif y2 - y1 == 0:
116 | # print("直线是水平的")
117 |
118 | line_horizontal.append(line[0])
119 |
120 | else:
121 | # 计算斜率
122 | k = -(y2 - y1) / (x2 - x1)
123 | # 求反正切,再将得到的弧度转换为度
124 | result = np.arctan(k) * 57.29577
125 | if -45 < result < 45:
126 | line_horizontal.append(line[0])
127 | else:
128 | line_vertical.append(line[0])
129 | # print("直线倾斜角度为:" + str(result) + "度")
130 | i = i + 1
131 | # 显示最后的成果图
132 | cv2.imwrite(end_image_root+"line_detect\\"+name, image)
133 | return line_horizontal, line_vertical
134 |
135 |
136 | def cal_point(point_list):
137 | """
138 |
139 | :param point_list:
140 | :return:
141 | """
142 | xy = []
143 | for point in point_list:
144 | xy.append([point[0], point[1]])
145 | xy.append([point[2], point[3]])
146 | return xy
147 |
148 |
149 | def cal_xy_point(xy_points):
150 | """
151 |
152 | :param xy_points:
153 | :return:
154 | """
155 | point_x = []
156 | point_y = []
157 | for point in xy_points:
158 | point_x.append(point[0])
159 | point_y.append(point[1])
160 | return point_x, point_y
161 |
162 |
163 | def linefit(x, y):
164 | """
165 | 拟合曲线
166 | :param x:
167 | :param y:
168 | :return:
169 | """
170 | N = float(len(x))
171 | sx, sy, sxx, syy, sxy = 0, 0, 0, 0, 0
172 | for i in range(0, int(N)):
173 | sx += x[i]
174 | sy += y[i]
175 | sxx += x[i] * x[i]
176 | syy += y[i] * y[i]
177 | sxy += x[i] * y[i]
178 | a = (sy * sx / N - sxy) / (sx * sx / N - sxx)
179 | b = (sy - a * sx) / N
180 | r = abs(sy * sx / N - sxy) / math.sqrt((sxx - sx * sx / N) * (syy - sy * sy / N))
181 | return a, b, r
182 |
183 |
184 | # 定义直线拟合函数
185 | def linear_regression(x, y):
186 | N = len(x)
187 | sumx = sum(x)
188 | sumy = sum(y)
189 | sumx2 = sum(x ** 2)
190 | sumxy = sum(x * y)
191 |
192 | A = np.mat([[N, sumx], [sumx, sumx2]])
193 | b = np.array([sumy, sumxy])
194 |
195 | return np.linalg.solve(A, b)
196 |
197 |
198 | def cal_a_and_b(points, flag):
199 | """
200 | 计算最大最小值
201 | :param points:
202 | :param flag: falg为1 为垂直检测,0为水平检测
203 | :return:
204 | """
205 | print(points)
206 | max_value = points[0][flag]
207 | min_value = points[0][flag]
208 | min_point = points[0]
209 | max_point = points[0]
210 | for point in points:
211 | print(point[flag])
212 | if point[flag] > max_value:
213 | max_value = point[flag]
214 | max_point = point
215 | if point[flag] < min_value:
216 | min_value = point[flag]
217 | min_point = point
218 | x1, y1 = max_point
219 | x2, y2 = min_point
220 | k = -(y2 - y1) / (x2 - x1)
221 | c = y2 - k * x2
222 | return k, c
223 |
224 |
225 | def del_point(lines):
226 | temp_list = []
227 | for line in lines:
228 | x1, y1, x2, y2 = line
229 | r = pow(pow(x1 - x2, 2) + pow(y1 - y2, 2), 0.5)
230 | if r < 100:
231 | continue
232 | else:
233 | temp_list.append(line)
234 | return temp_list
235 |
236 |
237 | def cal_k_ave(lines):
238 | """
239 | 求斜率平均值
240 | :param lines:
241 | :return:
242 | """
243 | new_lines = []
244 | total_length = 0 # 全部总长
245 | bia_total_len = 0 # 斜线总长
246 | bia_lines = [] # 放斜线坐标
247 | bia_line = []
248 | temp_lines = []
249 | end_k = 0.0
250 | end_b = 0.0
251 | angle = 0.0
252 | p = 0.0
253 | b = 0.0
254 | p_v = 0.0
255 | p_bia = 0.0
256 | for line in lines:
257 | x1, y1, x2, y2 = line
258 | r = int(pow(pow(x1 - x2, 2) + pow(y1 - y2, 2), 0.5))
259 | new_line = list(line)
260 | total_length = total_length + r
261 | new_line.append(r)
262 | new_lines.append(new_line)
263 |
264 | for new_line in new_lines:
265 | x1, y1, x2, y2, r = new_line
266 | p = r / total_length
267 | if x1 - x2 != 0:
268 | p_bia = p_bia + p # 概率加
269 | bia_total_len = bia_total_len + r
270 | k = (y2 - y1) / (x2 - x1)
271 | b = y1 - k * x1
272 | bia_line = [*new_line, k, b]
273 |
274 | bia_lines.append(bia_line)
275 | else:
276 | p_v = p_v + p # 概率加
277 | if p_v > 0.5:
278 | return []
279 | else:
280 | rr = 0
281 | for bia_line in bia_lines:
282 | x1, y1, x2, y2, r, k, b = bia_line
283 | p = r / bia_total_len
284 | end_k = end_k + k * p
285 | end_b = end_b + b * p
286 | rr = rr + p
287 | if abs(np.arctan(k) * 57.29577 - np.arctan(end_k) * 57.29577) > 20:
288 | bia_lines.remove(bia_line)
289 | for temp in bia_lines:
290 | temp_lines.append(temp[0:4])
291 |
292 | end_k, end_b = cal_k_ave(temp_lines)
293 | return [end_k, end_b]
294 |
295 |
296 | def calc_abc_from_line_2d(x0, y0, x1, y1):
297 | a = y0 - y1
298 | b = x1 - x0
299 | c = x0 * y1 - x1 * y0
300 | return a, b, c
301 |
302 |
303 | def get_line_cross_point(line1, line2):
304 | """
305 | 计算交点
306 | :param line1:
307 | :param line2:
308 | :return:
309 | """
310 | a0, b0, c0 = calc_abc_from_line_2d(*line1)
311 | a1, b1, c1 = calc_abc_from_line_2d(*line2)
312 | D = a0 * b1 - a1 * b0
313 | if D == 0:
314 | return None
315 | x = (b0 * c1 - b1 * c0) / D
316 | y = (a1 * c0 - a0 * c1) / D
317 | return x, y
318 |
319 |
320 | def cal_k_ave_h(lines):
321 | """
322 | 求斜率平均值
323 | :param lines:
324 | :return:
325 | """
326 | new_lines = []
327 | total_length = 0 # 全部总长
328 | end_k = 0.0
329 | end_b = 0.0
330 | end_lines = []
331 | temp_lines = []
332 |
333 | for line in lines:
334 | x1, y1, x2, y2 = line
335 | r = int(pow(pow(x1 - x2, 2) + pow(y1 - y2, 2), 0.5))
336 | new_line = list(line)
337 | total_length = total_length + r
338 | new_line.append(r)
339 | new_lines.append(new_line)
340 | for new_line in new_lines:
341 | x1, y1, x2, y2, r = new_line
342 | p = r / total_length
343 |
344 | k = (y2 - y1) / (x2 - x1)
345 | b = y1 - k * x1
346 | temp_line = [*new_line, k, b]
347 | end_lines.append(temp_line)
348 |
349 | end_k = end_k + k * p
350 | end_b = end_b + b * p
351 | for end_line in end_lines:
352 | x1, y1, x2, y2, r, k, b = end_line
353 | if abs(np.arctan(k) * 57.29577 - np.arctan(end_k) * 57.29577) > 10:
354 | end_lines.remove(end_line)
355 | for temp in end_lines:
356 | temp_lines.append(temp[0:4])
357 |
358 | end_k, end_b = cal_k_ave_h(temp_lines)
359 |
360 | return [end_k, end_b]
361 |
362 |
363 | def main(path, file_name):
364 | # 画点参数
365 | point_size = 1
366 | point_color = (0, 0, 255) # BGR
367 | thickness = 2
368 |
369 | temp_x = []
370 | temp_y = []
371 | line_l = [] # 左
372 | line_r = [] # 右
373 | line_t = [] # top
374 | line_d = [] # down
375 | # 读入图片
376 | src = cv2.imread(path)
377 | image_temp = src.copy()
378 | h, w, _ = image_temp.shape
379 |
380 | # 显示原始图片
381 | cv2.imwrite(end_image_root+"input image\\" + file_name, src)
382 |
383 | # 图像二值化
384 | image_bin_temp = src.copy()
385 | img = cv2.cvtColor(image_bin_temp, cv2.COLOR_BGR2GRAY)
386 |
387 | ret2, image_bin = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
388 | # 调用函数
389 | horizontal, vertical = line_detect(src)
390 |
391 | # 遍历horizontal求y的均值进行判断是上端还是下端
392 | for temp in horizontal:
393 | temp_x.append(temp[1])
394 | temp_x.append(temp[3])
395 | average_h = np.mean(temp_x)
396 | for temp in horizontal:
397 | if temp[1] > average_h and temp[3] > average_h:
398 | line_d.append(temp)
399 | else:
400 | line_t.append(temp)
401 |
402 | for temp in vertical:
403 | temp_y.append(temp[0])
404 | temp_y.append(temp[2])
405 | average_v = np.mean(temp_y)
406 | for temp in vertical:
407 | if temp[0] > average_v and temp[2] > average_v:
408 | line_r.append(temp)
409 | else:
410 | line_l.append(temp)
411 |
412 | # 转化为xy型式,便于拟合
413 | point_t = cal_point(line_t)
414 | point_d = cal_point(line_d)
415 | point_l = cal_point(line_l)
416 | point_r = cal_point(line_r)
417 |
418 | # 转化形式,用于拟合
419 | point_t_x, point_t_y = cal_xy_point(point_t)
420 | point_d_x, point_d_y = cal_xy_point(point_d)
421 | point_l_x, point_l_y = cal_xy_point(point_l)
422 | point_r_x, point_r_y = cal_xy_point(point_r)
423 | #
424 | total_point = []
425 | re_l = cal_k_ave(line_l)
426 | if len(re_l):
427 | al, bl = re_l
428 | point_l1 = (int(-bl / al) - 2, 0) # 用来画直线
429 | point_l2 = (int((h - bl) / al) - 2, h)
430 | cv2.line(image_temp, point_l1, point_l2, (0, 255, 0), thickness=2)
431 | else:
432 |
433 | point_l1 = (point_l_x[0] - 2, 0) # 用来画直线
434 | point_l2 = (point_l_x[0] - 2, h)
435 |
436 | cv2.line(image_temp, point_l1, point_l2, (0, 255, 0), thickness=2)
437 |
438 | re_r = cal_k_ave(line_r)
439 |
440 | if len(re_r):
441 | ar, br = re_r
442 | point_r1 = (int(-br / ar), 0) # 用来画直线
443 | point_r2 = (int((h - br) / ar), h)
444 | cv2.line(image_temp, point_r1, point_r2, (0, 255, 0), thickness=2)
445 |
446 |
447 | else:
448 | point_r1 = (point_r_x[0] + 2, 0) # 用来画直线
449 | point_r2 = (point_r_x[0] + 2, h)
450 | cv2.line(image_temp, point_r1, point_r2, (0, 255, 0), thickness=2)
451 |
452 | re_t = cal_k_ave_h(line_t)
453 | if len(re_t):
454 | tr_point = []
455 | tl_point = []
456 | at, bt = re_t
457 | point_t1 = (0, int(bt) - 2) # 用来画直线
458 | point_t2 = (w, int(w * at + bt) - 2)
459 | cv2.line(image_temp, point_t1, point_t2, (0, 255, 0), thickness=2)
460 | # 垂直时计算交点
461 | if point_r1[0] - point_r2[0] == 0:
462 | temp_xx = point_r1[0]
463 | temp_yy = int(round(point_r1[0] * at + bt, 0))
464 | tr_point.append(temp_xx)
465 | tr_point.append(temp_yy)
466 | else:
467 | # 算出交点
468 | tr_point = get_line_cross_point([*list(point_t1), *list(point_t2)], [*list(point_r1), *list(point_r2)])
469 | # 取整四舍五入
470 | point = (int(round(tr_point[0], 0)), int(round(tr_point[1], 0))) # 点的坐标。画点实际上就是画半径很小的实心圆。
471 | cv2.circle(image_temp, point, point_size, point_color, thickness)
472 | total_point.append(list(point))
473 |
474 | # 垂直时计算交点
475 | if point_l1[0] - point_l2[0] == 0:
476 | temp_xx = point_l1[0]
477 | temp_yy = int(round(point_l1[0] * at + bt, 0))
478 | tl_point.append(temp_xx)
479 | tl_point.append(temp_yy)
480 | else:
481 | tl_point = get_line_cross_point([*list(point_t1), *list(point_t2)], [*list(point_l1), *list(point_l2)])
482 | point = (int(round(tl_point[0], 0)), int(round(tl_point[1], 0))) # 点的坐标。画点实际上就是画半径很小的实心圆。
483 | cv2.circle(image_temp, point, point_size, point_color, thickness)
484 | total_point.append(list(point))
485 |
486 |
487 | else:
488 | print("t error")
489 |
490 | re_d = cal_k_ave_h(line_d)
491 | if len(re_d):
492 | dr_point = []
493 | dl_point = []
494 | ad, bd = re_d
495 | point_d1 = (0, int(bd) + 2) # 用来画直线
496 | point_d2 = (w, int(w * ad + bd) + 2)
497 | cv2.line(image_temp, point_d1, point_d2, (0, 255, 0), thickness=2)
498 |
499 | # 垂直时计算交点
500 | if point_r1[0] - point_r2[0] == 0:
501 | temp_xx = point_r1[0]
502 | temp_yy = int(round(point_r1[0] * ad + bd, 0))
503 | dr_point.append(temp_xx)
504 | dr_point.append(temp_yy)
505 | else:
506 | # 算出交点
507 | dr_point = get_line_cross_point([*list(point_d1), *list(point_d2)], [*list(point_r1), *list(point_r2)])
508 | # 取整四舍五入
509 | point = (int(round(dr_point[0], 0)), int(round(dr_point[1], 0))) # 点的坐标。画点实际上就是画半径很小的实心圆。
510 | cv2.circle(image_temp, point, point_size, point_color, thickness)
511 | total_point.append(list(point))
512 |
513 | # 垂直时计算交点
514 | if point_l1[0] - point_l2[0] == 0:
515 | temp_xx = point_l1[0]
516 | temp_yy = int(round(point_l1[0] * ad + bd, 0))
517 | dl_point.append(temp_xx)
518 | dl_point.append(temp_yy)
519 | else:
520 | dl_point = get_line_cross_point([*list(point_d1), *list(point_d2)], [*list(point_l1), *list(point_l2)])
521 | point = (int(round(dl_point[0], 0)), int(round(dl_point[1], 0))) # 点的坐标。画点实际上就是画半径很小的实心圆。
522 | cv2.circle(image_temp, point, point_size, point_color, thickness)
523 | total_point.append(list(point))
524 |
525 | else:
526 | print("d error")
527 |
528 | # print(total_point)
529 | pointSrc = np.float32(total_point) # 原始图像中 4点坐标
530 | pointDst = np.float32([[[0, 0], [500, 0], [0, 500], [500, 500]]]) # 变换图像中 4点坐标
531 | MP = cv2.getPerspectiveTransform(pointSrc, pointDst) # 计算投影变换矩阵 M
532 | imgP = cv2.warpPerspective(image_bin, MP, (500, 500)) # 用变换矩阵 M 进行投影变换
533 |
534 | # pointSrc = np.float32(total_point) # 原始图像中 4点坐标
535 | # pointDst = np.float32([[[0, 0], [500, 0], [0, 500], [500, 500]]]) # 变换图像中 4点坐标
536 | # MP = cv2.getPerspectiveTransform(pointDst, pointSrc) # 计算投影变换矩阵 M
537 | # re_imgP = cv2.warpPerspective(imgP, MP, (w, h)) # 用变换矩阵 M 进行投影变换
538 | # cv2.imwrite("re" + file_name, re_imgP)
539 |
540 | cv2.imwrite(end_image_root+"e\\" + file_name, imgP)
541 | cv2.imwrite(end_image_root+"c\\"+file_name, image_temp)
542 | return imgP, pointSrc, pointDst
543 |
544 |
545 | if __name__ == '__main__':
546 | rootDir = "D:\\SYS_File\\Desktop\\Python\\image\\low\\"
547 | filename = '175446.jpg'
548 | template = img = np.zeros((500, 500), dtype=np.uint8)
549 | main_image = cv2.imread(rootDir + filename)
550 | h, w, _ = main_image.shape
551 | # 获取模板
552 | t = len(2 * os.listdir(rootDir))
553 | from tqdm import tqdm
554 |
555 | bar = tqdm(total=t)
556 | for filename in os.listdir(rootDir):
557 | name = filename
558 | pathname = os.path.join(rootDir, filename)
559 | img, pointSrc, pointDst = main(pathname, filename)
560 | img_row = img.shape[0]
561 | img_col = img.shape[1]
562 |
563 | # 利用遍历操作对二维灰度图作取反操作
564 | for i in range(img_row):
565 | for j in range(img_col):
566 | temp1 = img[i, j]
567 | temp2 = template[i, j]
568 | if temp1 or temp2:
569 | template[i, j] = 255
570 | else:
571 | template[i, j] = 0
572 | bar.update(1)
573 | # # 比较
574 | damaged_point = []
575 | for filename in os.listdir(rootDir):
576 | name = filename
577 | end_image = cv2.imread(rootDir + filename)
578 | draw_image = end_image.copy()
579 | # 图像二值化
580 | image_bin_temp = end_image.copy()
581 | image_bin_temp = cv2.cvtColor(image_bin_temp, cv2.COLOR_BGR2GRAY)
582 | # 边缘缺失
583 | ret2, image_bin = cv2.threshold(image_bin_temp, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
584 | # 边缘破损
585 |
586 | ret, dam_img_bin = cv2.threshold(src=image_bin_temp, thresh=200, maxval=255, type=cv2.THRESH_BINARY)
587 |
588 | pathname = os.path.join(rootDir, filename)
589 | img, pointSrc, pointDst = main(pathname, filename) # 这里主要是反映射坐标求
590 |
591 | # 把模板反映射
592 | MP = cv2.getPerspectiveTransform(pointDst, pointSrc) # 计算投影变换矩阵 M
593 | end_template = cv2.warpPerspective(template, MP, (w, h)) # 用变换矩阵 M 进行投影变换
594 | cv2.imwrite(end_image_root+"re\\" + filename, end_template)
595 |
596 | img_row = image_bin.shape[0]
597 | img_col = image_bin.shape[1]
598 |
599 | cv2.imwrite(end_image_root+"bin\\" + filename, image_bin)
600 | # 利用遍历操作对二维灰度图作取反操作
601 | for i in range(img_row):
602 | for j in range(img_col):
603 | if end_template[i, j] == 255 and image_bin[i, j] == 0:
604 | damaged_point.append([i, j])
605 |
606 | if dam_img_bin[i, j] == 255 and end_template[i, j] == 255:
607 | damaged_point.append([i, j])
608 |
609 | for point in damaged_point:
610 | draw_image[point[0], point[1]] = [0, 0, 255]
611 | aa = len(damaged_point)
612 | cv2.imwrite(end_image_root+"end\\" + str(aa) + "_" + filename, draw_image)
613 | damaged_point.clear()
614 | bar.update(1)
615 |
--------------------------------------------------------------------------------
/result/bin/174937.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/174937.jpg
--------------------------------------------------------------------------------
/result/bin/175139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/175139.jpg
--------------------------------------------------------------------------------
/result/bin/175224.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/175224.jpg
--------------------------------------------------------------------------------
/result/bin/175314.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/175314.jpg
--------------------------------------------------------------------------------
/result/bin/175400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/175400.jpg
--------------------------------------------------------------------------------
/result/bin/175446.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/175446.jpg
--------------------------------------------------------------------------------
/result/bin/175515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/175515.jpg
--------------------------------------------------------------------------------
/result/bin/175913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/175913.jpg
--------------------------------------------------------------------------------
/result/bin/175936.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/175936.jpg
--------------------------------------------------------------------------------
/result/bin/180020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/180020.jpg
--------------------------------------------------------------------------------
/result/bin/180214.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/180214.jpg
--------------------------------------------------------------------------------
/result/bin/180315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/180315.jpg
--------------------------------------------------------------------------------
/result/bin/180353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/bin/180353.jpg
--------------------------------------------------------------------------------
/result/c/174937.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/174937.jpg
--------------------------------------------------------------------------------
/result/c/175139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/175139.jpg
--------------------------------------------------------------------------------
/result/c/175224.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/175224.jpg
--------------------------------------------------------------------------------
/result/c/175314.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/175314.jpg
--------------------------------------------------------------------------------
/result/c/175400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/175400.jpg
--------------------------------------------------------------------------------
/result/c/175446.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/175446.jpg
--------------------------------------------------------------------------------
/result/c/175515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/175515.jpg
--------------------------------------------------------------------------------
/result/c/175913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/175913.jpg
--------------------------------------------------------------------------------
/result/c/175936.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/175936.jpg
--------------------------------------------------------------------------------
/result/c/180020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/180020.jpg
--------------------------------------------------------------------------------
/result/c/180214.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/180214.jpg
--------------------------------------------------------------------------------
/result/c/180315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/180315.jpg
--------------------------------------------------------------------------------
/result/c/180353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/c/180353.jpg
--------------------------------------------------------------------------------
/result/e/174937.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/174937.jpg
--------------------------------------------------------------------------------
/result/e/175139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/175139.jpg
--------------------------------------------------------------------------------
/result/e/175224.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/175224.jpg
--------------------------------------------------------------------------------
/result/e/175314.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/175314.jpg
--------------------------------------------------------------------------------
/result/e/175400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/175400.jpg
--------------------------------------------------------------------------------
/result/e/175446.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/175446.jpg
--------------------------------------------------------------------------------
/result/e/175515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/175515.jpg
--------------------------------------------------------------------------------
/result/e/175913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/175913.jpg
--------------------------------------------------------------------------------
/result/e/175936.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/175936.jpg
--------------------------------------------------------------------------------
/result/e/180020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/180020.jpg
--------------------------------------------------------------------------------
/result/e/180214.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/180214.jpg
--------------------------------------------------------------------------------
/result/e/180315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/180315.jpg
--------------------------------------------------------------------------------
/result/e/180353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/e/180353.jpg
--------------------------------------------------------------------------------
/result/edges/174937.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/174937.jpg
--------------------------------------------------------------------------------
/result/edges/175139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/175139.jpg
--------------------------------------------------------------------------------
/result/edges/175224.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/175224.jpg
--------------------------------------------------------------------------------
/result/edges/175314.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/175314.jpg
--------------------------------------------------------------------------------
/result/edges/175400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/175400.jpg
--------------------------------------------------------------------------------
/result/edges/175446.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/175446.jpg
--------------------------------------------------------------------------------
/result/edges/175515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/175515.jpg
--------------------------------------------------------------------------------
/result/edges/175913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/175913.jpg
--------------------------------------------------------------------------------
/result/edges/175936.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/175936.jpg
--------------------------------------------------------------------------------
/result/edges/180020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/180020.jpg
--------------------------------------------------------------------------------
/result/edges/180214.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/180214.jpg
--------------------------------------------------------------------------------
/result/edges/180315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/180315.jpg
--------------------------------------------------------------------------------
/result/edges/180353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/edges/180353.jpg
--------------------------------------------------------------------------------
/result/end/26817_175314.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/26817_175314.jpg
--------------------------------------------------------------------------------
/result/end/26895_175224.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/26895_175224.jpg
--------------------------------------------------------------------------------
/result/end/27056_180315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/27056_180315.jpg
--------------------------------------------------------------------------------
/result/end/28187_180353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/28187_180353.jpg
--------------------------------------------------------------------------------
/result/end/28245_175400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/28245_175400.jpg
--------------------------------------------------------------------------------
/result/end/28364_175515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/28364_175515.jpg
--------------------------------------------------------------------------------
/result/end/29411_175139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/29411_175139.jpg
--------------------------------------------------------------------------------
/result/end/29774_180214.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/29774_180214.jpg
--------------------------------------------------------------------------------
/result/end/29803_175936.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/29803_175936.jpg
--------------------------------------------------------------------------------
/result/end/32804_175446.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/32804_175446.jpg
--------------------------------------------------------------------------------
/result/end/32945_175913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/32945_175913.jpg
--------------------------------------------------------------------------------
/result/end/33298_174937.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/33298_174937.jpg
--------------------------------------------------------------------------------
/result/end/35899_180020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/end/35899_180020.jpg
--------------------------------------------------------------------------------
/result/input image/174937.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/174937.jpg
--------------------------------------------------------------------------------
/result/input image/175139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/175139.jpg
--------------------------------------------------------------------------------
/result/input image/175224.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/175224.jpg
--------------------------------------------------------------------------------
/result/input image/175314.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/175314.jpg
--------------------------------------------------------------------------------
/result/input image/175400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/175400.jpg
--------------------------------------------------------------------------------
/result/input image/175446.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/175446.jpg
--------------------------------------------------------------------------------
/result/input image/175515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/175515.jpg
--------------------------------------------------------------------------------
/result/input image/175913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/175913.jpg
--------------------------------------------------------------------------------
/result/input image/175936.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/175936.jpg
--------------------------------------------------------------------------------
/result/input image/180020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/180020.jpg
--------------------------------------------------------------------------------
/result/input image/180214.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/180214.jpg
--------------------------------------------------------------------------------
/result/input image/180315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/180315.jpg
--------------------------------------------------------------------------------
/result/input image/180353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/input image/180353.jpg
--------------------------------------------------------------------------------
/result/line_detect/174937.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/174937.jpg
--------------------------------------------------------------------------------
/result/line_detect/175139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/175139.jpg
--------------------------------------------------------------------------------
/result/line_detect/175224.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/175224.jpg
--------------------------------------------------------------------------------
/result/line_detect/175314.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/175314.jpg
--------------------------------------------------------------------------------
/result/line_detect/175400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/175400.jpg
--------------------------------------------------------------------------------
/result/line_detect/175446.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/175446.jpg
--------------------------------------------------------------------------------
/result/line_detect/175515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/175515.jpg
--------------------------------------------------------------------------------
/result/line_detect/175913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/175913.jpg
--------------------------------------------------------------------------------
/result/line_detect/175936.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/175936.jpg
--------------------------------------------------------------------------------
/result/line_detect/180020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/180020.jpg
--------------------------------------------------------------------------------
/result/line_detect/180214.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/180214.jpg
--------------------------------------------------------------------------------
/result/line_detect/180315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/180315.jpg
--------------------------------------------------------------------------------
/result/line_detect/180353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/line_detect/180353.jpg
--------------------------------------------------------------------------------
/result/re/174937.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/174937.jpg
--------------------------------------------------------------------------------
/result/re/175139.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/175139.jpg
--------------------------------------------------------------------------------
/result/re/175224.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/175224.jpg
--------------------------------------------------------------------------------
/result/re/175314.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/175314.jpg
--------------------------------------------------------------------------------
/result/re/175400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/175400.jpg
--------------------------------------------------------------------------------
/result/re/175446.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/175446.jpg
--------------------------------------------------------------------------------
/result/re/175515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/175515.jpg
--------------------------------------------------------------------------------
/result/re/175913.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/175913.jpg
--------------------------------------------------------------------------------
/result/re/175936.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/175936.jpg
--------------------------------------------------------------------------------
/result/re/180020.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/180020.jpg
--------------------------------------------------------------------------------
/result/re/180214.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/180214.jpg
--------------------------------------------------------------------------------
/result/re/180315.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/180315.jpg
--------------------------------------------------------------------------------
/result/re/180353.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/result/re/180353.jpg
--------------------------------------------------------------------------------
/test.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/test.jpg
--------------------------------------------------------------------------------
/test.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 |
4 | rootDir = "D:\\SYS_File\\Desktop\\Python\\image\\low\\"
5 | filename = '175139.jpg'
6 |
7 | image = cv2.imread(rootDir + filename)
8 | img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
9 | line_vertical = []
10 | line_horizontal = []
11 |
12 | ret2, th2 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
13 |
14 | kernel = np.ones((10, 10), np.uint8)
15 | # 3图像的开闭运算
16 | cv0pen = cv2.morphologyEx(th2, cv2.MORPH_OPEN, kernel) # 开运算
17 | cv2.imwrite("test1.jpg", th2)
18 |
19 | edges = cv2.Canny(cv0pen, 50, 150, apertureSize=3)
20 | cv2.imwrite("test2.jpg", edges)
--------------------------------------------------------------------------------
/test1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/test1.jpg
--------------------------------------------------------------------------------
/test2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lx497/MachineVisionEdgeDamageDefectDetection/392942bb9d576d21d2f2b02df4ce2f24245f37be/test2.jpg
--------------------------------------------------------------------------------