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")



相关推荐
冰蓝蓝6 分钟前
什么是 实例化
python
幻想趾于现实7 分钟前
C# Winform 入门(1)之跨线程调用,程序说话
开发语言·c#·winform
KeithTsui8 分钟前
GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
linux·c语言·开发语言·c++·算法
returnShitBoy16 分钟前
Go语言中的defer关键字有什么作用?
开发语言·后端·golang
天天进步201517 分钟前
Python项目-基于Flask的个人博客系统设计与实现(2)
开发语言·python·flask
mNinGInG22 分钟前
c++练习
开发语言·c++·算法
牛马baby30 分钟前
Java高频面试之并发编程-02
java·开发语言·面试
凉白开3381 小时前
Scala基础知识
开发语言·后端·scala
不要不开心了1 小时前
Scala内容
开发语言·pytorch·flask·scala·dash
2401_824256861 小时前
Scala的函数式编程
开发语言·后端·scala