初学opencv/边缘检测

来源:互联网 发布:stm32 bootloader源码 编辑:程序博客网 时间:2024/05/18 03:54

在边缘检测中,常用的一种模板是Sobel 算子。Sobel 算子有两个,一个是检测水平边缘的 ;另一个是检测垂直边缘的 ,Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子。
Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。

#coding:utf-8"""边缘检测"""import numpy as npimport cv2import matplotlib.pyplot as plt#cv2.IMREAD_GRAYSCALE以灰度形式导入图片img = cv2.imread('images/wheel.png',cv2.IMREAD_GRAYSCALE)print(img.dtype)print(img.shape)#dst = cv2.Sobel(src, ddepth, dx, dy, ksize=3, scale=1.0)#图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度ddepth = cv2.CV_64F#求导的阶数dx = 1dy = 0sobel_img = cv2.Sobel(img,ddepth,dx,dy)#plt.imshow(sobel_img,cmap='gray')"""sobelx = cv2.Sobel(img,ddepth,1,0)sobely = cv2.Sobel(img,ddepth,0,1)#alpha是第一幅图片中元素的权重,beta是第二个的权重,gamma是加到最后结果上的一个值sobel = cv2.sqrt(cv2.addWeight(cv2.pow(sobelx,2.0),1.0,cv2.pow(sobely,2.0),1.0,0.0))plt.figure(figsize=(6,6))plt.subplot(2,2,1)plt.title('input image:')plt.axis('off')plt.imshow(img,cmap='gray')plt.subplot(2,2,2)plt.title('sobelx image:')plt.axis('off')plt.imshow(cv2.absdiff(sobelx,0.0),cmap='gray')plt.subplot(2,2,3)plt.title('sobely image:')plt.axis('off')#sobelx,sobely可能为负数值,cv2.absdiff() 差的绝对值plt.imshow(cv2.absdiff(sobely,0.0),cmap='gray')plt.subplot(2,2,1)plt.title('sobel image:')plt.axis('off')plt.imshow(sobel,cmap='gray')#plt.imshow(img,cmap='gray')"""#edges = cv2.Canny(image, threshold1, threshold2, apatureSize=3, L2gradient=False)threshold1 = 100threshold2 = 200canny = cv2.Canny(img,threshold1,threshold2)plt.imshow(canny,cmap='gray')plt.show()

结果:

这里写图片描述

这里写图片描述

原创粉丝点击