位置: IT常识 - 正文

基于opencv的边缘检测方法(opencv 边缘)

编辑:rootadmin
基于opencv的边缘检测方法 1、梯度运算

推荐整理分享基于opencv的边缘检测方法(opencv 边缘),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opencv sobel边缘检测,opencv 边缘,opencv边缘提取函数,opencv边缘检测canny,opencv 边缘,opencv 边界,opencv 边缘检测,opencv 边缘检测,内容如对您有帮助,希望把文章链接给更多的朋友!

用OpenCV的形态变换( 膨胀、腐蚀、开运算和闭运算)函数morphologyEx 梯度运算即膨胀结果-腐蚀结果: 【注意】对于二值图像来说,必须是前景图像为白色,背景为黑色,否则需要进行反二值化处理

import cv2import matplotlib.pyplot as pltimport numpy as np##读入图片im1 = cv2.imread(r"fiction\xiaozhu.jpg", cv2.IMREAD_GRAYSCALE)#创建一个5行5列的值全为1 的卷积核k = np.ones((5,5),np.uint8)##进行梯度运算r = cv2.morphologyEx(im1, cv2.MORPH_GRADIENT, k)##图像展示plt.subplot(1,2,1)plt.imshow(im1, cmap="gray")plt.axis("off")plt.subplot(1,2,2)plt.imshow(r, cmap= "gray")plt.axis("off")plt.show()

2、sobel算子

可以计算不同方向的梯度,梯度运算如下图所示: 得出x方向的梯度值和y方向的梯度值后,通过G = sqr(GX2 + GY2)或G = |GX|+G|Y|得到整幅图像的梯度。

cv2.Sobel参数: 【注意】 1、如果梯度为负数,会无法显示,所以计算完梯度之后需要进行取绝对值处理。 2、同时计算x方向和y方向的梯度,通常没有分别计算两个方向梯度后,进行后处理效果好,通常用cv2.addWeighted(src1, alpha, src2, beta, gamma)进行修正。 3、卷积核大小只能为奇数。

import cv2import numpy as npim1 = cv2.imread(r"fiction\xiaozhu1.jpg",cv2.IMREAD_GRAYSCALE)##默认卷积核为3*3,如果写cv2.Sobel(im1, 0, 1, 0)的话,只能取到一侧边界,另一侧边界值为负,会被规整成0sobelx = cv2.Sobel(im1, cv2.CV_64F, 1, 0,ksize=3)sobely = cv2.Sobel(im1, cv2.CV_64F, 0, 1,ksize=3)##取绝对值cv2.convertScaleAbs(sobelx)sobelxy = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)##同时取x、y的sobel算子没有单独计算x、y然后相加的效果好sobel_tmp = cv2.Sobel(im1, cv2.CV_64F, 1, 1)cv2.convertScaleAbs(sobel_tmp)cv2.namedWindow("dx=1", 0)cv2.namedWindow("dy=1", 0)cv2.namedWindow("after addWeighted", 0)cv2.namedWindow("dx=1,dy=1", 0)cv2.imshow("dx=1", sobelx)cv2.imshow("dy=1", sobely)cv2.imshow("after addWeighted", sobelxy)cv2.imshow("dx=1,dy=1", sobel_tmp)cv2.waitKey(0)cv2.destroyAllWindows()

3、scharr算子

类似sobel算子,但是卷积核系数不同,离目标点越近的像素权重越大,边缘提取的效果比sobel算子好 二者效果对比如下:

import cv2im1 = cv2.imread(r"fiction\xiaozhu.jpg", cv2.IMREAD_GRAYSCALE)##Scharr算子提取边缘,scharr相较于sobel算子,靠近核心部分的权值较大,边缘提取的效果更好,x与y不能同时为1im1x = cv2.Scharr(im1, cv2.CV_64F, 1, 0)im1y = cv2.Scharr(im1, cv2.CV_64F, 0, 1)im1x = cv2.convertScaleAbs(im1x)im1y = cv2.convertScaleAbs(im1y)im1ScharryXY = cv2.addWeighted(im1x, 0.5, im1y, 0.5, 0)##拉普拉斯算子imLap = cv2.Laplacian(im1,cv2.CV_64F)imLap = cv2.convertScaleAbs(imLap)##对比sobel算子提取边缘的效果im1SobelX = cv2.Sobel(im1, cv2.CV_64F, 1, 0)im1SobelY = cv2.Sobel(im1, cv2.CV_64F, 0, 1)im1SobelX = cv2.convertScaleAbs(im1SobelX)im1SobelY = cv2.convertScaleAbs(im1SobelY)im1SobelXY = cv2.addWeighted(im1SobelX, 0.5, im1SobelY, 0.5, 0)##sobel算子模拟scharr算子进行边缘提取im1So_SC_X = cv2.Sobel(im1, cv2.CV_64F, 1, 0, -1)im1So_SC_Y = cv2.Sobel(im1, cv2.CV_64F, 0, 1, -1)im1So_SC_X = cv2.convertScaleAbs(im1So_SC_X)im1So_SC_Y = cv2.convertScaleAbs(im1So_SC_Y)im1So_SC_XY = cv2.addWeighted(im1So_SC_X, 0.5, im1So_SC_Y, 0.5, 0)cv2.namedWindow("im1ScharryXY", 0)cv2.namedWindow("im1SobelXY", 0)cv2.namedWindow("im1So_SC_XY", 0)cv2.namedWindow("imLap", 0)cv2.imshow("im1ScharryXY", im1ScharryXY)cv2.imshow("im1SobelXY", im1SobelXY)cv2.imshow("im1So_SC_XY", im1So_SC_XY)cv2.imshow("imLap", imLap)cv2.waitKey(0)cv2.destroyAllWindows()

依次为scharry算子、sobel算子、sobel仿scharry、拉普拉斯算子结果

4、canny边缘检测基于opencv的边缘检测方法(opencv 边缘)

原理: 1、高斯滤波去噪声 2、平滑后的图像用sobel算子计算梯度,梯度方向如下图所示: 梯度方向一般都与边界垂直, 一般归类为四个方向:垂直、水平,两个对角线

3、去除所有非边界点 4、滞后阈值 选取两个阈值,maxVal和minVal

5、用法,其实就一个函数,cv2.Canny()

import cv2im1 = cv2.imread(r"fiction\pig2.jpg", cv2.IMREAD_UNCHANGED)im1 = cv2.Canny(im1, 128, 256)im2 = cv2.Canny(im1, 0, 256)im3 = cv2.Canny(im1, 0, 128)im4 = cv2.Canny(im1, 0, 10)cv2.namedWindow("128_256",0)cv2.namedWindow("0_256",0)cv2.namedWindow("0_128",0)cv2.namedWindow("0_10",0)cv2.imshow("128_256",im1)cv2.imshow("0_256",im2)cv2.imshow("0_128",im3)cv2.imshow("0_10",im4)cv2.waitKey(0)

5、拉普拉斯金字塔

原图像减去(原图->向下采样->向上采样) 两次采样后图像会被平滑

import cv2im1 = cv2.imread(r"fiction\xiaozhu.jpg", cv2.IMREAD_GRAYSCALE)##向下取样,长、宽各变为1/2im1Low = cv2.pyrDown(im1)##向上取样,长、宽各变为原来2倍,会变模糊im1High = cv2.pyrUp(im1Low)##拉普拉斯金字塔结果lapPyr = im1-im1Highcv2.namedWindow("im1Low",0)cv2.namedWindow("im1High",0)cv2.namedWindow("im1",0)cv2.namedWindow("lapPyr",0)cv2.imshow("im1",im1)cv2.imshow("im1Low",im1Low)cv2.imshow("lapPyr",lapPyr)cv2.imshow("im1High",im1High)cv2.waitKey(0)cv2.destroyAllWindows()

依次为原图、向下取样一次、向上取样、原图-向上取样结果 可多层构造拉普拉斯金字塔

5、findContours

这是个轮廓检测的方法,注意,边缘和轮廓是不一样的,边缘不一定连续,但是轮廓是连续的。

import cv2o = cv2.imread(r"fiction\xiaozhu.jpg", cv2.IMREAD_GRAYSCALE)co = cv2.imread(r"fiction\xiaozhu.jpg", cv2.IMREAD_UNCHANGED)cco = co.copy()max_threshold,img = cv2.threshold(o,127,255,cv2.THRESH_BINARY)##findcounters:原始图像、轮廓检测方式(只检测外轮廓、等级树形式等)、轮廓近似方式##查找、绘制过程中会改变原图像counters, hieraichy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)r = cv2.drawContours(co, counters, -1, (255,0,0),6)cv2.namedWindow("o", 0)cv2.namedWindow("r", 0)cv2.imshow("o", cco)cv2.imshow("r", r)cv2.waitKey(0)cv2.destroyAllWindows()

6、高通滤波

利用傅里叶变换,将o转化为频域 低频为内部信息,高频为边缘信息 通过高通滤波器得到边缘信息

#低频为内部信息,高频为边缘信息import cv2import matplotlib.pyplot as pltimport numpy as npo = cv2.imread(r"fiction\xiaozhu.jpg", cv2.IMREAD_GRAYSCALE)##利用傅里叶变换,将o转化为频域,cv2.DFT_COMPLEX_OUTPUT返回双通道的结果,包含幅度和频率,第一个通道是实数部分,第二个通道为虚数部分#dft = cv2.dft(np.float32(o), flags=cv2.DFT_COMPLEX_OUTPUT)dft = np.fft.fft2(o)#将频域0点移动到中心dft1 = np.fft.fftshift(dft)# result = 20*np.log(cv2.magnitude(dft1[:,:,0], dft1[:,:,1]))## plt.subplot(2,2,1)# plt.imshow(o, cmap="gray")## plt.subplot(2,2,2)# plt.imshow(result,cmap="gray")## plt.show()##通过高通滤波器得到边缘信息rows,cols = o.shapecrow,ccols = int(rows/2),int(cols/2)dft1[crow-3:crow+30,ccols-30:ccols+30] = 0ishift = np.fft.ifftshift(dft1)iimg = np.fft.ifft2(ishift)iimg = np.abs(iimg)plt.subplot(1,2,1)plt.imshow(o,cmap="gray")plt.subplot(1,2,2)plt.imshow(iimg,cmap="gray")plt.show()

本文链接地址:https://www.jiuchutong.com/zhishi/298351.html 转载请保留说明!

上一篇:震撼,支持多模态模型的ChatGPT 4.0发布了(多模手机)

下一篇:【学Vue就跟玩一样】学习vue就像打游戏一样简单(vue学起来困难吗)

  • vivox70pro怎么关闭广告(vivox70Pro怎么关空调)

    vivox70pro怎么关闭广告(vivox70Pro怎么关空调)

  • 企业微信直播课怎么关闭摄像头(企业微信直播课怎么看回放)

    企业微信直播课怎么关闭摄像头(企业微信直播课怎么看回放)

  • 西湖益联保自动扣费怎么关闭(西湖益联保自动扣款)

    西湖益联保自动扣费怎么关闭(西湖益联保自动扣款)

  • vivo手机电量百分比的设置方法是什么(vivo 电量)

    vivo手机电量百分比的设置方法是什么(vivo 电量)

  • 苹果有锁机老提示运营商更新(苹果有锁机显示)

    苹果有锁机老提示运营商更新(苹果有锁机显示)

  • 闲鱼冻结资金多久到账(闲鱼冻结资金多久自动解冻啊)

    闲鱼冻结资金多久到账(闲鱼冻结资金多久自动解冻啊)

  • 极米h3为什么没镜头盖(极米h 3 s)

    极米h3为什么没镜头盖(极米h 3 s)

  • 华为微信怎么设置暗黑模式(华为微信怎么设置指纹锁)

    华为微信怎么设置暗黑模式(华为微信怎么设置指纹锁)

  • 小米CC9手机怎么内录(小米cc9手机怎么清理内存最干净)

    小米CC9手机怎么内录(小米cc9手机怎么清理内存最干净)

  • 华为手机面部识别怎么设置(华为手机面部识别)

    华为手机面部识别怎么设置(华为手机面部识别)

  • 苹果se2双卡双待吗(苹果 iphone se2单卡双卡)

    苹果se2双卡双待吗(苹果 iphone se2单卡双卡)

  • 华为手机清灰功能在哪里(华为手机清灰功能的原理是什么)

    华为手机清灰功能在哪里(华为手机清灰功能的原理是什么)

  • 苹果11微信背景黑色怎么回事(苹果11微信背景黑色怎么改白色)

    苹果11微信背景黑色怎么回事(苹果11微信背景黑色怎么改白色)

  • 老年手机听不见说话怎么办(老年手机听不见对方说话是怎么回事)

    老年手机听不见说话怎么办(老年手机听不见对方说话是怎么回事)

  • 腾讯会议录屏有声音吗(腾讯会议录屏有效期多久)

    腾讯会议录屏有声音吗(腾讯会议录屏有效期多久)

  • 微信好友删除了怎么找回来(微信好友删除了还能不能找回来)

    微信好友删除了怎么找回来(微信好友删除了还能不能找回来)

  • ipad11寸怎么插耳机(ipad11耳机插孔在哪里)

    ipad11寸怎么插耳机(ipad11耳机插孔在哪里)

  • 微博图片上传错误是什么意思(微博图片上传错误3022105是什么意思)

    微博图片上传错误是什么意思(微博图片上传错误3022105是什么意思)

  • word如何设置英文字体(word如何设置英文字体格式)

    word如何设置英文字体(word如何设置英文字体格式)

  • pdf文档可以用什么打开(pdf文档用什么编辑)

    pdf文档可以用什么打开(pdf文档用什么编辑)

  • 电池图标变黄怎么办(电池图标变黄怎么回事)

    电池图标变黄怎么办(电池图标变黄怎么回事)

  • ipad登录qq为什么闪退(ipad登录qq为什么一直显示平板在线)

    ipad登录qq为什么闪退(ipad登录qq为什么一直显示平板在线)

  • 京东取消订单流程(京东提交订单取消)

    京东取消订单流程(京东提交订单取消)

  • 苹果11可以放两张移动卡吗(苹果11可以放两张联通卡吗)

    苹果11可以放两张移动卡吗(苹果11可以放两张联通卡吗)

  • 拼多多怎样直接免拼单(拼多多怎样直接提现到微信)

    拼多多怎样直接免拼单(拼多多怎样直接提现到微信)

  • 手机怎么看无线ssid(手机怎么看无线网络有多少人连接)

    手机怎么看无线ssid(手机怎么看无线网络有多少人连接)

  • 快手相册照片如何删除(快手相册照片如何保存)

    快手相册照片如何删除(快手相册照片如何保存)

  • qq表情红包领了会不会让对方看到脸(qq的表情红包在哪里能找到)

    qq表情红包领了会不会让对方看到脸(qq的表情红包在哪里能找到)

  • ios12暗黑模式怎么开(苹果ios12暗黑模式怎么设置)

    ios12暗黑模式怎么开(苹果ios12暗黑模式怎么设置)

  • Linux中用于进程显示的top命令使用实例集锦(linux的进程类型)

    Linux中用于进程显示的top命令使用实例集锦(linux的进程类型)

  • 小规模纳税人增值税起征点
  • 缴纳印花税的会计凭证
  • 餐饮个体户如何开票
  • 年底企业所得税计提少了
  • 短期借款利息计提分录
  • 小规模纳税人滚动累计
  • 普通发票的税费额度高吗
  • 发票开具就能做账了吗
  • 如何在电子税务局开具全电发票
  • 资本公积只能转现金吗
  • 国家规定先打五联还是麻腮风
  • 增值税零申报触发附加税零申报
  • 前期差错会计处理知乎
  • 商业企业库存商品和销售对不上
  • 取得与收益相关的政府补助会计分录
  • 进口货物的价格国内销售需要考虑的税
  • 哪些税种可以税前扣除
  • 卷式发票属于什么税
  • 营改增的会计分录
  • 一般纳税人取得小规模纳税人的专票可以抵扣吗
  • 公司购买地下停车位如何入账
  • 购买标书的费用计入什么科目
  • 进项税额转出多转了怎么办
  • 资产减值准备如何转销
  • 六大会计科目的关系
  • 工会职工活动支出标准
  • 代扣代缴增值税怎么申报
  • 小规模纳税人代理销售税率是多少
  • 劳务服务公司可以承包大型工程吗?
  • 境外取得收入
  • wifi密码怎么改手机里面
  • 待认证进项税额借方余额表示什么
  • mac dash
  • rds selected
  • 利息收入结转时怎么做账
  • 消费税的计税方法有
  • 应收账款收回怎么处理
  • 企业的组织形式共5种
  • 利润表本月数可以不填吗
  • 可供出售金融资产在资产负债表日反映的是
  • 庞塞 德莱昂
  • php静态方法调用
  • 高新技术企业收入占比不到60%,能否享受税收优惠政策
  • AI:DeepSpeed Chat(一款帮用户训练自己模型的工具且简单/低成本/快 RLHF 训练类ChatGPT高质量大模型)的简介、安装、使用方法之详细攻略
  • 数据模型 excel
  • 明星身价几十亿
  • tsop封装
  • 股本及溢价
  • 个人福利要交税吗
  • 收到税务局退税怎么入账
  • 认缴制和实缴制的时间
  • 网红产品的推广文案
  • 房地产项目转让流程
  • sql语句批量添加数据
  • sql常用优化技巧
  • 企业每个季度叫什么
  • 咨询服务业主营业务成本
  • 开具红字发票如何做账?
  • 购车是否有进项税额
  • 购进生产车间增值税税率
  • 折扣销售方式销售货物只要发票中有注明的折扣额
  • 同比增长率环比增长率怎么算
  • 五金配件生意好做吗
  • 开销项负数的流程
  • 企业持有的能够对被投资单位实施控制的长期股权投资
  • 如何计提当期费用成本
  • 息税前利润是什么税之前
  • 新单位年终工作总结
  • mysql where clause
  • win8更改系统字体
  • xp系统打开软件慢怎么解决
  • 如何进入opencore引导
  • sxs.exe病毒
  • jquery22插件网
  • [置顶]游戏名 TentacleLocker
  • css盒子模型示意图
  • Python内置函数的应用操作
  • python3正则
  • jquery校验form表单
  • 税务检查的三种常用方法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设