python opencv 边缘检测(sobel、沙尔算子、拉普拉斯算子、Canny)

python opencv 边缘检测(sobel、沙尔算子、拉普拉斯算子、Canny)

这次实验,我们分别使用opencv 的 sobel算子、沙尔算子、拉普拉斯算子三种算子取进行边缘检测,然后后面又使用了Canny算法进行边缘检测。

直接看代码,代码比较简单,不是很复杂:

注:cv2.convertScaleAbs进行了一个绝对值操作,因为可能计算出来梯度为负值。

python 复制代码
from ctypes.wintypes import SIZE
from multiprocessing.pool import IMapUnorderedIterator
import cv2
import copy
import math
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import os

path=r'ls.jpg'

img=cv2.imread(path,1)
img_gray=cv2.imread(path,0)



def cv_show(name,img):
    cv2.imshow(name,img)
    #cv2.waitKey(0),接收0,表示窗口暂停
    cv2.waitKey(0)
    #销毁所有窗口
    cv2.destroyAllWindows()


#cv_show('img_gray',img_gray)



#Sobel算子




img_sobel_x=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)#1,0 表示选择水平还是竖直放心计算梯度




img_sobel_y=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)#1,0 表示选择水平还是竖直放心计算梯度

sobel_img_x_abs=cv2.convertScaleAbs(img_sobel_x)
img_sobel_y_abs=cv2.convertScaleAbs(img_sobel_y)

img_sobel_xy_abs=cv2.addWeighted(sobel_img_x_abs,0.5,img_sobel_y_abs,0.5,0)
plt.subplot(231)
#img_gray=BGR_TO_RGB(img_gray,'gray')
plt.imshow(img_sobel_x[:,:,::-1])
plt.title('img_sobel_x')

plt.subplot(232)
plt.imshow(sobel_img_x_abs[:,:,::-1])
plt.title('sobel_img_x_abs')
plt.subplot(233)

#result=BGR_TO_RGB(result)
plt.imshow( img[:,:,::-1])
plt.title('img')

plt.subplot(234)

#result=BGR_TO_RGB(result)
plt.imshow( img_sobel_y[:,:,::-1])
plt.title('img_sobel_y')


plt.subplot(235)

#result=BGR_TO_RGB(result)
plt.imshow( img_sobel_y_abs[:,:,::-1])
plt.title('img_sobel_y_abs')

plt.subplot(236)

#result=BGR_TO_RGB(result)
plt.imshow( img_sobel_xy_abs[:,:,::-1])
plt.title('img_sobel_xy_abs')
plt.show()



#沙尔算子

scharrx=cv2.Scharr(img,cv2.CV_64F,dx=1,dy=0)



scharry=cv2.Scharr(img,cv2.CV_64F,dx=0,dy=1)

scharry_img_x_abs=cv2.convertScaleAbs(scharrx)

scharry_img_y_abs=cv2.convertScaleAbs(scharry)

img_scharry_xy_abs=cv2.addWeighted(scharry_img_x_abs,0.5,scharry_img_y_abs,0.5,0)
#拉普拉斯算子
lap_img=cv2.Laplacian(img,cv2.CV_64F)
lap_img_abs=cv2.convertScaleAbs(lap_img)
plt.subplot(121)
#img_gray=BGR_TO_RGB(img_gray,'gray')
plt.imshow(scharry_img_y_abs[:,:,::-1])
plt.title('scharry_img_y_abs')

plt.subplot(122)
plt.imshow(lap_img_abs[:,:,::-1])
plt.title('lap_img_abs')
plt.show()


#result=BGR_TO_RGB(r

path=r'D:\learn\photo\cv\lena.jpg'

img=cv2.imread(path,0)
img_canny1=cv2.Canny(img,80,150)
img_canny2=cv2.Canny(img,50,150)
plt.subplot(131)
#img_gray=BGR_TO_RGB(img_gray,'gray')
plt.imshow(img,'gray')
plt.title('img')
plt.subplot(132)
#img_gray=BGR_TO_RGB(img_gray,'gray')
plt.imshow(img_canny1,'gray')
plt.title('img_canny1')

plt.subplot(133)
plt.imshow(img_canny2,'gray')
plt.title('img_canny2')
plt.show()


os.system("pause")



相关推荐
CodeWithMe7 分钟前
【C/C++】EBO空基类优化介绍
开发语言·c++
这里有鱼汤9 分钟前
熟练掌握MACD这8种形态,让你少走三年弯路(附Python量化代码)| 建议收藏
后端·python
404.Not Found17 分钟前
Day46 Python打卡训练营
开发语言·python
love530love19 分钟前
【PyCharm必会基础】正确移除解释器及虚拟环境(以 Poetry 为例 )
开发语言·ide·windows·笔记·python·pycharm
凌辰揽月20 分钟前
Web后端基础(基础知识)
java·开发语言·前端·数据库·学习·算法
海奥华224 分钟前
go中的接口返回设计思想
开发语言·后端·golang
lifallen26 分钟前
深入浅出 Arrays.sort(DualPivotQuicksort):如何结合快排、归并、堆排序和插入排序
java·开发语言·数据结构·算法·排序算法
运维开发王义杰26 分钟前
Python: 告别 ModuleNotFoundError, 解决 pipx 环境下 sshuttle 缺少 pydivert 依赖的终极指南
开发语言·python
k要开心28 分钟前
从C到C++语法过度1
开发语言·c++
小吕学编程31 分钟前
策略模式实战:Spring中动态选择商品处理策略的实现
java·开发语言·设计模式