OpenCV入门系列 —— Sobel边缘检测

  • 前言
  • 程序说明
  • 输出结果
  • 代码示例
  • 总结

前言

随着工业自动化、智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识别、定位、抓取、测量,缺陷检测等),而针对不同作业场景进行解决方案设计时,通常会借助PCL、OpenCV、Eigen等简单方便的开源算法库进行方案的快速验证和迭代以满足作业场景下的目标需求。

为了让对工业机器视觉方向感兴趣的同学能够少走一些弯路,故推出了此一系列简易入门教程示例,让初次使用者能够最简单直观地感受到当前所用算法模块的执行效果。

后续会逐步扩增与工业机器视觉相关的一些其它内容,如:

项目案例剖析场景数据分析基础算法模块相机评测 等;

如有兴趣可加入群聊(若入群二维码被屏蔽,则可以通过Q群(1032861997)或评论、私信博主“群聊”,邀请入群),与同道同学及圈内同行一起交流讨论。


程序说明

展示sobel边缘检测效果;

输出结果

代码示例

/** @File: sobel_edge.cpp* @Brief: opencv course* @Description: 展示sobel边缘检测效果* @Version: 0.0.1* @Author: MuYv*/
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>int main(int argc, char** argv){if(argc != 2){std::cout<<"Usage: exec img_file_path"<<std::endl;return -1;}const std::string kImgFilePath = argv[1];   // "../imgs/woman2.jpg"// // 加载为 rgb 3通道彩色图数据// cv::Mat img_src = cv::imread(kImgFilePath, cv::IMREAD_COLOR);// 加载为灰度图数据cv::Mat img_src = cv::imread(kImgFilePath, cv::IMREAD_GRAYSCALE);cv::Mat img_edge, img_gray;  //参数定义cv::Mat grad_x, grad_y;cv::Mat abs_grad_x, abs_grad_y,dst;// 求 X方向梯度cv::Sobel( img_src, grad_x, CV_16S, 1, 0, 3, 1, 1, cv::BORDER_DEFAULT );cv::convertScaleAbs( grad_x, abs_grad_x );cv::imshow("【效果图】 X方向Sobel", abs_grad_x); // 求Y方向梯度cv::Sobel( img_src, grad_y, CV_16S, 0, 1, 3, 1, 1, cv::BORDER_DEFAULT );cv::convertScaleAbs( grad_y, abs_grad_y );cv::imshow("【效果图】Y方向Sobel", abs_grad_y); // 合并梯度(近似)cv::addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst );cv::imshow("【效果图】整体方向Sobel", dst); cv::imshow("img_src", img_src);// 等待n毫秒后关闭窗口,0代表一直开启,直到任意按键触发关闭窗口cv::waitKey(0);return 0;
}

总结

与canny边缘检测算法不同,如果待检测的边缘有较为明显的横纵特征,sobel的检测效果可能会更符合预期;


注:部分测试所用图片数据来源于网络,如有侵权,请联系博主删除,谢谢。

OpenCV入门系列 —— Sobel边缘检测相关推荐

  1. OpenCV入门系列 —— boxFilter盒子滤波

    OpenCV入门系列 -- boxFilter盒子滤波 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识 ...

  2. OpenCV入门系列 —— cv::dilate 图像膨胀

    OpenCV入门系列 -- cv::dilate 图像膨胀 前言 程序说明 输出结果 代码示例 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识别 ...

  3. OpenCV入门系列 —— cv::erode、cv::dilate 图像腐蚀和膨胀

    OpenCV入门系列 -- cv::erode.cv::dilate 图像腐蚀和膨胀 前言 程序说明 输出结果 代码示例 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用 ...

  4. OpenCV入门系列 —— cv::minEnclosingCircle 随机生成点坐标并计算最小包围圆

    OpenCV入门系列 -- cv::minEnclosingCircle 随机生成点坐标并计算最小包围圆 前言 程序说明 输出结果 代码示例 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3 ...

  5. OpenCV入门系列 —— bilateralFilter双边滤波

    OpenCV入门系列 -- bilateralFilter双边滤波 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也 ...

  6. OpenCV入门系列1:图像组成与OpenCV基本操作函数

    文章目录 前言 一.图像组成 1.1 图片与像素点 1.2 RGB颜色系统 1.3 图像数值转换原理 1.4 彩色图与灰度图 二.OpenCV函数验证 2.1 引入OpenCV库 2.2 读入彩色图片 ...

  7. OpenCV入门系列2:图像叠加、填充和腐蚀

    文章目录 前言 一.图像的叠加 1.1 叠加原理 1.2 叠加问题 1.3 问题解决 1.4 结果展示 二.图像的填充 2.1 填充方法介绍 2.2 复制法 2.3 轴对称法 2.4 中心对称法 2. ...

  8. OpenCV入门系列(4):显示一张图片和一个视频

    显示一张图片,对于我们来说是很容易理解的事情.但播放一个视频,感觉就很神秘很有技术含量了. 然而今天看了<学习OpenCV中文版>中的两个小例子后,惊呼,原来如此,居然这么简单!就是我们经 ...

  9. opencv入门系列教学(五)图像的基本操作(像素值、属性、ROI和边框)

    0.序言 每个图像是由一个个点组成的,而这些点可以表示为像素值的形式. 这篇博客里我们将学会: 访问像素值并修改它们 . 访问图像属性 . 设置感兴趣区域(ROI) . 分割和合并图像. 对于图像的基 ...

最新文章

  1. C#网络编程(基本概念和操作) - Part.1
  2. java分页模板_java 分页模型的模板
  3. 手动将jar添加到maven仓库中
  4. Unity(创建脚本)
  5. java jsch session 多久会断开_What?纯Java居然能实现Xshell!
  6. c++ mysql 导入sql_mysql导入sql文件命令和mysql远程登陆使用详解
  7. Django数据获取操作
  8. SpringBoot项目热部署配置
  9. Opencv使用cv::matchTemplate进行模板匹配
  10. PHP面向对象之领域模型+数据映射器
  11. 男孩应该懂的,女孩应该懂的
  12. atitit.  web组件化原理与设计
  13. Linux常用命令(超详细)
  14. 瑞友天翼应用虚拟化系统V6.0之虚拟磁盘管理
  15. 代写python代码一般多少钱_代写代码一般多少钱(专业解读)
  16. [计算机组成原理] 考试前突击挂科训练
  17. 马来西亚数字自由贸易区的发展实践
  18. 大连商务英语学校百家外语国际部商务英语与普通英语的不同之处
  19. (11)向量组及其线性组合
  20. 国密算法 SM4 对称加密 分组密码 python实现完整代码

热门文章

  1. ARCGIS创建文件数据库-包括概念介绍
  2. SPSS安装教程(免费版)
  3. 机器人路径规划之分段三次Hermite插值(PCHIP) [包括Python和Matlab代码实现]
  4. 手机英文上面的逗号怎么打_英文写作中标点符号怎么用?--逗号篇
  5. 【vijos】【spfa最短路】想越狱的小杉
  6. 张涵诚:大数据驱动企业的创新发展与管理变革
  7. 搭建Prometheus配置企业微信告警
  8. Ubuntu系统下实现把文件移动至别的文件夹下
  9. RS485 串口实现单片机得通信
  10. 大数据毕业设计 机器视觉图像拼接算法研究与实现 - python opencv