当前位置:   article > 正文

python+opencv Canny边缘检测_50行canny边缘检测算法python

50行canny边缘检测算法python

Step1:高斯滤波(低通滤波,用高斯滤波器平滑图像)

  • 卷积/卷积核(对应相乘再相加)
  • 原始图片外围加一圈0,为保证新图片与原始图片大小相同
  • 卷积核为3*3,外围补一圈0;卷积核为5*5,外围补两圈0

 Step2:计算图像梯度及梯度方向(图像增强)

 Step3:非极大值抑制(阈值设置)

 Step4:双阈值筛选边缘

  1. #---------------------------------边缘检测---------------------------------
  2. import cv2
  3. class MainWindow():
  4. def __init__(self):
  5. super().__init__()
  6. img = cv2.imread("D:/Users/xuyf2/Desktop/cp1635564192.jpg")
  7. print('img_shape', img.shape)
  8. src0 = cv2.resize(img, (640, 480))
  9. # src1 = src0[0:480, 365:515] # 裁切需要的部分
  10. scr1 = cv2.medianBlur(src0, 5) # 中值滤波
  11. self.line_detect_possible_demo(scr1)
  12. def line_detect_possible_demo(self,image): # 检测出可能的线段
  13. gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  14. edges = cv2.Canny(gray, 200,610, apertureSize=3)
  15. print('edges_shape', edges.shape)
  16. cv2.imshow("Canny", edges)
  17. if __name__ == '__main__':
  18. mainWindow = MainWindow()
  19. cv2.waitKey(0)
  20. cv2.destroyAllWindows()
  • 寻找角点 
  1. import cv2
  2. import numpy as np
  3. cover_path = "D:/Users/xuyf2/Desktop/lego_jier/cp1622130065.jpg"
  4. im1 = cv2.imread(cover_path) # 读取图片
  5. im2 = cv2.resize(im1,(640,480),) # 缩放图片
  6. img = im2[0:400, 80:300] # 裁剪图片
  7. scr1 = cv2.medianBlur(img, 5) # 中值滤波
  8. gray = cv2.cvtColor(scr1, cv2.COLOR_BGR2GRAY) # 灰度处理
  9. edges = cv2.Canny(gray, 150,400, apertureSize=3) # 灰度处理
  10. cv2.imshow("Canny", edges) # 边缘检测
  11. gra = np.float32(edges)
  12. # 角点坐标
  13. corners = cv2.goodFeaturesToTrack(gra, 50, 0.1, 50)
  14. corners = np.int0(corners)
  15. for i in corners: # 降维
  16. x, y = i.ravel()
  17. print([x,y]) # 打印角点坐标
  18. cv2.circle(img, (x, y), 6, (0, 0, 255), -1)
  19. cv2.imwrite('jiaodian.jpg', img)
  20. cv2.imshow('jiaodian', img)
  21. cv2.waitKey(0)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/838558
推荐阅读
相关标签
  

闽ICP备14008679号