- #! usr/bin/env python
- # coding:utf-8
- # 2018 年 7 月 2 日 06:48:35
- # 2018 年 7 月 2 日 23:11:59
- import cv2
- import numpy as np
- import matplotlib.pyplot as plt
- img = cv2.imread('number.jpg',0)
- # 其中, 0 表示将图片以灰度读出来.
- #### 图像边缘处理 sobel 细节
- sobelx = cv2.Sobel(img,cv2.CV_64F, 1, 0, ksize=3)
- # 利用 Sobel 方法可以进行 sobel 边缘检测
- # img 表示源图像, 即进行边缘检测的图像
- # cv2.CV_64F 表示 64 位浮点数即 64float.
- # 这里不使用 numpy.float64, 因为可能会发生溢出现象. 用 cv 的数据则会自动
- # 第三和第四个参数分别是对 X 和 Y 方向的导数 (即 dx,dy), 这里 1 表示对 X 求偏导, 0 表示不对 Y 求导. 其中, X 还可以求 2 次导.
- # 注意: 对 X 求导就是检测 X 方向上是否有边缘.
- # 第五个参数 ksize 是指核的大小.
- # 这里说明一下, 这个参数的前四个参数都没有给谁赋值, 而 ksize 则是被赋值的对象
- # 实际上, 这时可省略的参数, 而前四个是不可省的参数. 注意其中的不同点
- # 还有其他参数, 有需要的话可以去看, 也可留言.
- sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
- # 与上面不同的是对 y 方向进行边缘检测
- sobelXY = cv2.Sobel(img, cv2.CV_64F, 1, 1, ksize=3)
- # 这里对两个方向同时进行检测, 则会过滤掉仅仅只是 x 或者 y 方向上的边缘
- ##### 图像展示
- # 展示上面处理的图片, 包括源图像.
- # 注意使用 subplot 和 title 方法
- plt.subplot(2,2,1)
- plt.imshow(img,'gray')
- # 其中 gray 表示将图片用灰度的方式显示, 注意需要使用引号表示这是 string 类型.
- # 可以用本行命令显示'gray'的类型: print(type('gray'))
- plt.title('src')
- plt.subplot(2,2,2)
- plt.imshow(sobelx,'gray')
- plt.title('sobelX')
- plt.subplot(2,2,3)
- plt.imshow(sobely,'gray')
- plt.title('sobelY')
- plt.subplot(2,2,4)
- plt.imshow(sobelXY,'gray')
- plt.title('sobelXY')
- plt.show()
- ---------------------
来源: http://www.bubuko.com/infodetail-2837539.html