• 迅为RK3568开发板Scharr滤波器算子边缘检测


    本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程\04_OpenCV 开发配套资料\33”目录下,如下图所示:

    在 Sobel 算子算法函数中,如果设置 ksize=-1 就会使用 3x3 的 Scharr 滤波器。Scharr 算子是 Soble 算子在 ksize=3 时的优化,与 Soble 的速度相同,且精度更高。Scharr 算子与 Sobel

    算子的不同点是在平滑部分,其中心元素占的权重更重,相当于使用较小标准差的高斯函数,也就是更瘦高的模板。

    Scharr 算子的卷积核为:

    cv2.Scharr 函数功能:

    使用 Scharr 算子进行边缘检测。

    函数原型:

    dst = cv2.Scharr(src, ddepth, dx, dy[, dst[, scale[, delta[, borderType]]]])

    参数定义:

    dst 代表目标图像。

    src 代表原始图像。

    ddepth 代表输出图像的深度。

    dx 代表 x 方向上的求导阶数。

    dy 代表 y 方向上的求导阶数。

    scale 代表计算导数值时所采用的缩放因子,默认情况下该值是 1,是没有缩放的。

    delta 代表加在目标图像 dst 上的值,该值是可选的,默认为 0。

    borderType 代表边界样式。

    实验:

    实验要求:

    使用 cv2.Scharr 函数,分别对 x 轴和 y 轴进行边缘检测,随后使用 cv2.addWeighted 函数以 0.5:0.5 的比例将两个图像进行融合,最后使用 cv2.imshow()函数对原图和边缘检测的三个图像进行展示

    实验步骤:

    首先进入到 ubuntu 的终端界面将“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程\04_OpenCV 开发配套资料\33”路径下的 number.png 拷贝到 ubuntu 虚拟机上,拷贝完成如

    下图所示:

    然后来到 ubuntu 虚拟机的终端界面,输入以下命令来创建 demo33_Scharr.py 文件,如下图所示:

    vim demo33_Scharr.py

    然后向该文件中添加以下内容:

    1 import cv2 #opencv 的缩写为 cv2,导入 opencv

    2 img = cv2.imread('number.png',1) #flags 参数为 1,返回彩色图像

    3 cv2.imshow('原图',img)#通过 cv2.imshow()函数展示原图

    4 scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)# 使用 Sobel 算子进行边缘检测,数据类型设置为 cv2.CV_64F,只算 x

    5 方向梯度,Sobel 核大小设置为 3

    6 scharrx = cv2.convertScaleAbs(scharrx) # 计算绝对值

    7 cv2.imshow('scharrx',scharrx)#通过 cv2.imshow()函数展示 x 方向梯度边缘检测计算之后的图像

    8 scharry = cv2.Scharr(img,cv2.CV_64F,0,1) #使用 Sobel 算子进行边缘检测,数据类型设置为 cv2.CV_64F,只算 x

    9 方向梯度,Sobel 核大小设置为 3

    10 scharry = cv2.convertScaleAbs(scharry) #计算绝对值

    11 cv2.imshow('scharry',scharry)#通过 cv2.imshow()函数展示 y 方向梯度边缘检测计算之后的图像

    12 scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0) # 图像融合的系数比为 0.5:0.5,0 表示偏置项

    13 cv2.imshow('sobelxy',scharrxy)#通过 cv2.imshow()函数展示融合之后的图像

    14 cv2.waitKey(0)#等待下一次按键按下

    15

    第 1 行导入了 opencv 库;

    第 2 行使用了 imread()函数对 number.png 图片进行读取;

    第 3 行使用了 imshow()函数对原图像进行展示;

    第 4 行使用 Scharr 算子进行边缘检测计算,数据类型设置为 cv2.CV_64F,只算 x 方向梯度;

    第 8 行使用 Scharr 算子进行边缘检测计算,数据类型设置为 cv2.CV_64F,只算 y 方向梯度;

    第 6 行和第 10 行使用了 convertScaleAbs()函数获取绝对值,并将图像转换为 8 位;

    第 7 行和第 11 行使用了 imshow()函数对两个方向梯度进行边缘检测计算之后的图像进行展示;

    第 12 行使用了 addWeighted()函数进行图像融合,两个图像的融合系数比为 0.5:0.5;

    第 14 行使用了 imshow()函数对融合之后的图像进行展示;

    第 15 行使用了 waitKey()函数,持续显示展示照片直到按键的按下。

    保存退出之后,在终端界面中输入以下命令进行 python 代码的运行,运行结果如下图所示:

    python demo33_Scharr.py

    第 1 张图为原图,一个数独图像被显示了出来,第 2 张图像为 x 轴方向梯度经过边缘检测计算的图像,可以看到纵向的线条被很好的区分了出来,第 3 张图像为 y 轴方向梯度经过边缘

    检测计算的图像,可以看到横向的线条被很好的区分了出来,第 4 张图像为两张边缘计算图像的融合,可以看到图像的边缘特点被很好的展现了出来。至此 Scharr 算子边缘计算相关的实验就结束了。

    更多文档可以查看

    B站搜索-北京迅为RK3568开发板,

    公众Hao关注:北京迅为,

  • 相关阅读:
    BUUCTF:[MRCTF2020]套娃
    万字详解JVM,让你一文吃透
    闲置手机电脑流量变现项目
    Go float精度 .00值判断
    使用EasyDarwin+ffmpeg+EasyPlayerPro完成rtsp的推流操作和拉流操作
    SSM框架集成
    RabbitMq高级特性-2
    [vscode]使用cmake时将命令行参数传递给调试目标
    考研:研究生考试(五天学完)之《线性代数与空间解析几何》研究生学霸重点知识点总结之第一课行列式
    机器学习(五):数据缩放
  • 原文地址:https://blog.csdn.net/mucheni/article/details/133697098