卷积核的效果--垂直、水平边缘检测~玩

import matplotlib.pyplot as plt
import cv2, numpy as np
imgpath = '/.jpg'
def conv3_3(img, i, j, filt, result):
    '''
    对img以左上角为i,j的位置做3X3的卷积
    '''
    ans = 0
    for ii in range(3):
        for jj in range(3):
            ans = ans + filt[ii, jj] * img[i+ii,j+jj,0]
            ans = ans + filt[ii, jj] * img[i+ii,j+jj,1]
            ans = ans + filt[ii, jj] * img[i+ii,j+jj,2]
    result[i][j] = ans
    
def conv(gray_img, filt):
    n, m = gray_img.shape[:2]
    result = np.zeros((n - 3, m - 3))
    print('result.shape', result.shape)
    for i in range(0, n - 3):
        for j in range(0, m - 3):
            conv3_3(gray_img, i, j, filt, result)
            
    
    result = result.astype('uint8')
    return result
gray_img = cv2.imread(imgpath)
print(gray_img.shape)  #(341, 432)
filt1 = np.array([[1, 0, -1],
                [1, 0, -1],
                [1, 0, -1]])
filt2 = np.array([[-1, 0, 1],
                [-1, 0, 1],
                [-1, 0, 1]])
filt3 = np.array([[1, 1, 1],
                [0, 0, 0],
                [-1, -1, -1]])
filt4 = np.array([[-1, -1, -1],
                [0, 0, 0],
                [1, 1, 1]])
r1 = conv(gray_img, filt1)
r2 = conv(gray_img, filt2)
plt.figure(1)
plt.subplot(121, title='vertical 1,0,-1')
plt.imshow(r1)
plt.subplot(122, title='vertical -1,0,1')
plt.imshow(r2)
r3 = conv(gray_img, filt3)
r4 = conv(gray_img, filt4)
plt.figure(2)
plt.subplot(121, title='horizontal 1,0,-1')
plt.imshow(r3)
plt.subplot(122, title='horizontal -1,0,1')
plt.imshow(r4)
plt.figure(3)
plt.imshow(gray_img)
 

猜你喜欢

转载自blog.csdn.net/Windlight_/article/details/84102602
今日推荐