commit 84db6cfc9449ade0aa5c681d179d2845655c0ed5 Author: maochaoying <925670706@qq.com> Date: Thu Jul 20 18:20:07 2023 +0800 胶带平行检测 diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..93e072f Binary files /dev/null and b/.DS_Store differ diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..120a0a2 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..7e9ec82 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1689645263707 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000..42173ea --- /dev/null +++ b/app.py @@ -0,0 +1,108 @@ +# coding=utf-8 +import cv2 +import numpy as np +import math + +# 修改图像的对比度,coefficent>0, <1降低对比度,>1提升对比度 建议0-2 +def change_contrast(img, coefficent): + imggray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + m = cv2.mean(img)[0] + graynew = m + coefficent * (imggray - m) + img1 = np.zeros(img.shape, np.float32) + k = np.divide(graynew, imggray, out=np.zeros_like(graynew), where=imggray != 0) + img1[:, :, 0] = img[:, :, 0] * k + img1[:, :, 1] = img[:, :, 1] * k + img1[:, :, 2] = img[:, :, 2] * k + img1[img1 > 255] = 255 + img1[img1 < 0] = 0 + return img1.astype(np.uint8) + +# 修改图像的亮度,brightness取值0~2 <1表示变暗 >1表示变亮 +def change_brightness(img, brightness): + [averB, averG, averR] = np.array(cv2.mean(img))[:-1] / 3 + k = np.ones((img.shape)) + k[:, :, 0] *= averB + k[:, :, 1] *= averG + k[:, :, 2] *= averR + img = img + (brightness - 1) * k + img[img > 255] = 255 + img[img < 0] = 0 + return img.astype(np.uint8) + +# 对图像二值化并取中值滤波 +def threshold_img(image): + gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) + retval, dst = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) + img_median = cv2.medianBlur(dst, 3) + return img_median + +# 腐蚀图像 +def corrosion_img(image): + # 腐蚀操作会把裂痕也消除 + kernel = np.ones((9, 9), dtype=np.uint8) + opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel, 1) + return opening + +# 找出最右侧的近似竖直直线 通过直线与水平的角度判断是否倾斜 大于容错率的竖直 小于容错率的倾斜 +def lines_img(image): + slopes = [] + yErrorRange = 3 + xErrorRange = 3 + minLength = 20 + # 创建一个LSD对象 + lsd = cv2.createLineSegmentDetector(0) + # 执行检测结果 + dlines = lsd.detect(image) + # 绘制检测结果 + for dline in dlines[0]: + x0 = int(round(dline[0][0])) + y0 = int(round(dline[0][1])) + x1 = int(round(dline[0][2])) + y1 = int(round(dline[0][3])) + length = math.hypot(x1 - x0, y1 - y0) + if (x0 > 605 and x1 > 605): + # print((x0, y0), (x1, y1)) + # 需要根据角坐标排除 横向线,针对纵向线判断是否有倾斜 + # 过滤横线 + if not (abs(x1 - x0) > xErrorRange and abs(y1 - y0) < yErrorRange): + # 过滤线段长度 + if not (length < minLength): + if x1 - x0 != 0: + k = abs(y1 - y0) / abs(x1 - x0) + angle = math.atan(k) * 180 / math.pi + slopes.append(angle) + print(angle) + # cv2.line(img0, (x0, y0), (x1,y1), (0,255,0), 1, cv2.LINE_AA) + # 有小于85度的就证明胶带倾斜了 + threshold = 85 + res = any(x < threshold for x in slopes) + if res: + print("胶带倾斜") + else: + print("胶带正确") + + +def detectionImg(): + # 读取输入图片 + img = cv2.imread("img/a.png") + l = 0 + c = 34 + # 亮度 -1~1 + imgBrightness = change_brightness(img, float(l - 50) / float(50)) + # 对比度 0~2 + img0 = change_contrast(imgBrightness, c / 50) + thresholdImg = threshold_img(img0) + corrosionImg = corrosion_img(thresholdImg) + lines_img(corrosionImg) + # 显示并保存结果 + cv2.imshow("gray", corrosionImg) + cv2.imshow("lines", img0) + cv2.waitKey(0) + cv2.destroyAllWindows() + + +if __name__ == '__main__': + detectionImg() + + + diff --git a/img/.DS_Store b/img/.DS_Store new file mode 100644 index 0000000..385b9eb Binary files /dev/null and b/img/.DS_Store differ diff --git a/img/1.pic.jpg b/img/1.pic.jpg new file mode 100644 index 0000000..34b3be1 Binary files /dev/null and b/img/1.pic.jpg differ diff --git a/img/2.pic.jpg b/img/2.pic.jpg new file mode 100644 index 0000000..1698314 Binary files /dev/null and b/img/2.pic.jpg differ diff --git a/img/a.png b/img/a.png new file mode 100644 index 0000000..f55fdfb Binary files /dev/null and b/img/a.png differ diff --git a/img/lie.jpg b/img/lie.jpg new file mode 100644 index 0000000..5efb182 Binary files /dev/null and b/img/lie.jpg differ