├── .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 | 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 | ![image](https://user-images.githubusercontent.com/81954499/209473473-09486ec2-ba76-4bd8-96dc-bb3c2e4846ff.png) 8 | ![image](https://user-images.githubusercontent.com/81954499/209473491-cd0f139d-fc38-43a7-9d75-7526d44b50fc.png) 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 --------------------------------------------------------------------------------