#!/usr/bin/env python 
# coding=utf-8
#1.编译器声明和2.编码格式声明
#1:为了防止用户没有将python安装在默认的/usr/bin目录，系统会先从env(系统环境变量)里查找python的安装路径，再调用对应路径下的解析器完成操作，也可以指定python3
#2:Python.X 源码文件默认使用utf-8编码，可以正常解析中文，一般而言，都会声明为utf-8编码

import cv2 #引用OpenCV功能包
import numpy as np #引用数组功能包

#读取图片
img_1 = cv2.imread('3.EdgeDetection.jpg')

#获取图片信息
img_1_height, img_1_width, img_1_channels = img_1.shape

#横向边缘检测算子
kernel_horizon = np.array([[-3, -9, -3],
                           [ 0,  0,  0],
                           [ 3,  9,  3]])
 
#垂直边缘检测算子
kernel_vertical = np.array([[-3,  0,  3],
                            [-9,  0,  9],
                            [-3,  0,  3]])

#全向边缘检测算子
kernel_full = np.array([[ 0, -9,  0],
                        [-9,  0,  9],
                        [ 0,  9,  0]])

#复制图片
img_horizon=img_1.copy()
img_vertical=img_1.copy()
img_full=img_1.copy()

#卷积操作进行边缘检测
#cv2.filter2D(输入图片, 输出图片深度（-1表示与输入图片深度一样）, 卷积核,  输出图片)
cv2.filter2D(img_1, -1, kernel_horizon,  img_horizon)
cv2.filter2D(img_1, -1, kernel_vertical, img_vertical)
cv2.filter2D(img_1, -1, kernel_full,     img_full)

Quit=0 #是否继续运行标志位
#提示停止方法
print ('Press key "Q" to stop.')

while Quit==0:
    keycode=cv2.waitKey(3) #每3ms刷新一次图片，同时读取3ms内键盘的输入
    if(keycode==ord('Q')): #如果按下“Q”键，停止运行标志位置1，调出while循环，程序停止运行
       Quit=1

    #显示图片
    cv2.imshow('img_1', img_1)
    cv2.imshow('img_horizon', img_horizon)
    cv2.imshow('img_vertical', img_vertical)
    cv2.imshow('img_full', img_full) 

print ('Quitted!') #提示程序已停止
cv2.destroyAllWindows() #程序停止前关闭所有窗口
