初学opencv/边缘检测

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

#coding:utf-8
"""
边缘检测
"""
import numpy as np
import cv2
import 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 = 1
dy = 0
sobel_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 = 100
threshold2 = 200
canny = cv2.Canny(img,threshold1,threshold2)
plt.imshow(canny,cmap='gray')

plt.show()

结果:

这里写图片描述

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值