文末有相关文档和视频链接,打字太慢,就只写关键部分,望理解。
正文
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)指出,进群答案:数字图像处理。在本文评论指出可能导致回复很晚。
 
                    
                     
                    
                 
                    
                 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号