文末有相关文档和视频链接,打字太慢,就只写关键部分,望理解。
正文
0.1 Premitt、Roberts算子
# Premitt算子
kx = np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]], dtype=np.float32)
ky = np.array([[-1, -1, -1], [0, 0, 0], [1, 1, 1]], dtype=np.float32)
# Roberts算子
kx = np.array([[-1, 0], [0, 1]], dtype=np.float32)
ky = np.array([[0, -1], [1, 0]], dtype=np.float32)
cv.filter2D(img, -1, kernel)
0.2 Sobel、Scharr算子
cv.Sobel(img, cv.CV_16S, 1, 0, ksize=3)
cv.Scharr(img, cv.CV_64F, 0, 1, ksize=3)
0.3 Laplacian、LoG算子
cv.Laplacian(img, cv.CV_16S)
0.4 Canny边缘检测
cv.Canny(img, 20, 200)
实例
以其中一个算子为例子。
Prewitt算子
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
def show(img):
if img.ndim == 2:
plt.imshow(img, cmap='gray')
else:
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()
img = cv.imread('pic/gift500x500.jpg', 0)
kx = np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]], dtype=np.float32)
ky = np.array([[-1, -1, -1], [0, 0, 0], [1, 1, 1]], dtype=np.float32)
imgX = cv.filter2D(img, cv.CV_64F, kx)
imgY = cv.filter2D(img, cv.CV_64F, ky)
imgXY = np.sqrt(imgX**2 + imgY**2)
imgXY2 = np.abs(imgX) + np.abs(imgY)
show(np.hstack([imgXY.clip(0,255), imgXY2.clip(0, 255)]))
效果
说明:
- 未经许可,谢绝转载。
- 本教程为《数字图像处理Python OpenCV实战》的配套代码相关内容。
免费视频教程为0-6章(标题号≤6),可在此处点击观看。
所有课件及源代码可在此处下载:
链接:https://pan.baidu.com/s/198PySe_vebO3e06idHSQ6g
提取码:11o4
有问题可在QQ群(1079300899)指出,进群答案:数字图像处理。在本文评论指出可能导致回复很晚。