1. OpenCV API : GaussianBlur ; Canny
边缘检测算法: 1. gray 2. 高斯滤波 3. canny
import cv2
import numpy as np
import random
img = cv2.imread("./mm1.jpg",1)
cv2.imshow("src",img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
# 边缘检测canny算法(基本都是基于灰度图像来处理的)
# 1. gray 2. 高斯滤波 3. canny
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgG = cv2.GaussianBlur(gray,(3,3),0)
dst = cv2.Canny(img,50,50)
# 第一个参数:数据; 第二个参数:图片的两个门限:如果图片经过卷积之后的值大于这个门限,我们就认为是边缘点
cv2.imshow("dst",dst)
cv2.waitKey(0)
2. 边缘检测算法(Python实现)
import cv2
import numpy as np
import random
import math
img = cv2.imread("./mm1.jpg",1)
cv2.imshow("src",img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
# sobel算子原理(Python实现)
# [ 1 2 1 [ 1 0 -1
# 0 0 0 2 0 -2
# -1 -2 -1 ] 1 0 -1 ]
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst = np.zeros((height,width,1),np.uint8)
for i in range(0,height-2):
for j in range(0,width-2):
gy = gray[i,j]*1 + gray[i,j+1]*2 + gray[i,j+2]*1 - gray[i+2,j]*1 - gray[i+2,j+1]*2 - gray[i+2,j+2]*1
gx = gray[i,j]*1 - gray[i,j+2]*1 + gray[i+1,j]*2 - gray[i+1,j+2]*2 + gray[i+2,j]*1 - gray[i+2,j+2]*1
grad = math.sqrt(gx*gx + gy*gy)
if grad > 50:
dst[i,j] = 255
else:
dst[i,j] = 0
cv2.imshow("dst",dst)
cv2.waitKey(0)