canny算法
Canny算法步骤:
①高斯模糊 - GaussianBlur
②灰度转换 - cvtColor
③计算梯度 – Sobel/Scharr
④非最大信号抑制
⑤高低阈值输出二值图像——高低阈值比值为2:1或3:1最佳
边缘提取函数
import cv2
def Opencv_canny_edge_extraction(img):
#img: 原图像
#return 黑白边缘,彩色边缘
gaus = cv2.GaussianBlur(img, (3, 3), 0) #高斯模糊
gray = cv2.cvtColor(gaus,cv2.COLOR_BGR2GRAY) #灰度化
gradx = cv2.Sobel(gray, cv2.CV_16SC1, 1, 0)
grady = cv2.Sobel(gray, cv2.CV_16SC1, 0, 1)
edge_out = cv2.Canny(gradx, grady, 50, 150) #黑白的边缘 高低阈值比值为2:1或3:1最佳(50:150 = 1:3)
dst = cv2.bitwise_and(img, img,mask=edge_out) # 彩色的边缘
return edge_out,dst
应用
物体提取
我尝试利用彩色边缘提取,再结合滑动窗口的方式来确定疑似目标在图片中的位置
画出矩形框
Numpy的数组各行,各列的求和,平均值,最大值,最小值,最大最小值差,标准差,方差等的计算
算法:
1.将图片分为m×n个矩形区域
2.计算每个矩形区域的像素和
3.根据像素和求每个区域的近似微分,舍弃边缘区域
4.筛选极大值作为疑似目标区域中心