当前位置: 首页 > news >正文

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

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

这次实验,我们分别使用opencv 的 sobel算子、沙尔算子、拉普拉斯算子三种算子取进行边缘检测,然后后面又使用了Canny算法进行边缘检测。
直接看代码,代码比较简单,不是很复杂:
注:cv2.convertScaleAbs进行了一个绝对值操作,因为可能计算出来梯度为负值。

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 ospath=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(rpath=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")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/242331.html

相关文章:

  • 【Unity入门】鼠标输入和键盘输入
  • 芯知识 | MP3语音芯片IC的优势特征及其在现代科技应用中的价值
  • C语言进阶之路-基本数据小怪篇
  • 【OpenCV实现图像:使用OpenCV生成拼图效果】
  • 【AOSP】生成签名文件release key,通过Android源码对apk进行签名
  • 深度学习之基于Tensorflow银行卡号码识别系统
  • 第95步 深度学习图像目标检测:Faster R-CNN建模
  • 设计模式—里氏替换原则
  • PyTorch包
  • 22、什么是中间件和权限拦截中间件实操
  • vue.config.js
  • 80C51单片机----数据传送类指令
  • 【Golang】使用泛型对数组进行去重
  • Ps:画笔工具的基本操作
  • 【Apache Doris】一键实现万表MySQL整库同步 | 快速体验
  • 35.逻辑运算符
  • ASP.NET Core 启用CORS
  • io.lettuce.core.RedisCommandExecutionException
  • vue3 导出数据为 excel 文件
  • PyQt6简介
  • 某60区块链安全之未初始化的存储指针实战二学习记录
  • 软件工程第十二周
  • electron 问题记录
  • nodejs+vue+python+PHP+微信小程序-留学信息查询系统的设计与实现-安卓-计算机毕业设计
  • JWT和Token之间的区别
  • UserRole
  • java学习part10 this
  • Spring Cloud + Nacos 项目启动失败【No spring.config.import property has been defined】
  • CANopen协议【SDO】
  • 9-什么是迭代器,生成器,装饰器、django的信号用过吗?如何用,干过什么、什么是深拷贝,什么是浅拷贝,如何使用、slice操作符和list构造函数