OpenCV学习代码记录——canny边缘检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录。
代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tree/master/OpenCVTest。
效果

代码
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp> // cvtColor
// http ://blog.csdn.net/hitwengqi/article/details/6877864
static cv::Mat image, edge; // 原始图片,canny边缘保存图片
static cv::Mat gray, gedge; // 灰度图片,canny便于保存图片
int edgeThresh = 1; // 控制进度条(传出进度条控制的值)
void onTrackBar(int, void*);
int CannyEdgeDetection()
{
// 加载原始图片
image = cv::imread("../Image/sisy.jpg");
// 判断载入是否成功
if (image.empty()) {
printf("载入图片失败\n");
return -1;
}
// 生成灰度图片,因为只有灰度图片才能生成边缘图片
// gray.create(image.size(), image.type()); // 这里create是没有用的
cv::cvtColor(image, gray, CV_BGR2GRAY); // 这里会自动去create到转换的目标保存类型,这里应该是UINT8
cv::imshow("gray", gray);
// 新建一个窗口
cv::namedWindow("Edge Map", 1);
// 生成一个进度条来控制边缘检测
cv::createTrackbar("Canny Threshold", "Edge Map",
&edgeThresh/*传出进度条的值*/,100/*进度条长度*/,
onTrackBar /*进度条值改变时调用的函数*/);
// 初始化图像
onTrackBar(0, NULL);
// 等待按键
cv::waitKey();
return 0;
}
void onTrackBar(int, void*)
{
// blur 灰度图片(blur 模糊)
cv::blur(gray, gedge, cv::Size(3, 3));
// Canny 边缘检测
cv::Canny(gray /*单通道输入图像.*/,
gedge/*单通道存储边缘的输出图像*/,
edgeThresh/*第一个阈值*/,
edgeThresh * 3 /*第二个阈值*/,
3 /*Sobel算子内核大小*/);
// 全部设置为0
edge = cv::Scalar::all(0);
// 拷贝边缘像素点
image.copyTo(edge, gedge);
// 显示图片
cv::imshow("Edge Map", edge);
}
OpenCV学习代码记录——canny边缘检测的更多相关文章
- OpenCV学习代码记录——Hough线段检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习笔记(11)——Canny边缘检测
了解Canny边缘检测的概念 1.原理 Canny边缘检测是一种非常流行的边缘检测算法,是 John F.Canny在1986年提出的.它是一个有很多步构成的算法 1)噪声去除 使用5*5的高斯滤波器 ...
- OpenCV学习代码记录——人脸检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录—— Snake轮廓
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习代码记录——轮廓(contour)检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- 实战深度学习OpenCV(一):canny边缘检测
利用canny边缘检测,我们可以很好地得到哦一个图像的轮廓,下面是基于C++的,这是我们通过这段代码得到的结果: #include "pch.h" #include <ios ...
- [学习OpenCV攻略][008][Canny边缘检测]
cvGetSize(输入图片) 得到输入图片的大小 cvCanny(输入图片,输出图片,lowThresh,highThresh,aperture) 把输入图片按设定光圈值进行Canny边缘检测,然后 ...
- openCV(四)---Canny边缘检测
图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘. 直接上代码,函数简介都在代码注释中 //canny边缘检测 -(void) ...
- Opencv学习笔记3:边缘检测算子的实现方法
一.边缘检测概念 图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘.效果如图: 接下来介绍一下边缘提取的几种算子,具体证明过程 ...
随机推荐
- [转]php curl经典最常用的5个例子
转自: http://www.jb100.net/html/content-22-821-1.html php curl常用的5个例子 我用php ,curl主要是抓取数据,当然我们可以用其他的方法来 ...
- 样条之贝塞尔(Bezier)
我曾经发过两篇关于贝塞尔的文章:数学图形(1.47)贝塞尔(Bézier)曲线,数学图形之贝塞尔(Bézier)曲面.那是使用我自己定义的脚本语言生成贝塞尔图形.由于我自己定义的脚本语法功能有限,所以 ...
- [leetcode]Triangle @ Python
原题地址:https://oj.leetcode.com/problems/triangle/ 题意: Given a triangle, find the minimum path sum from ...
- 如何确定一个NFS的mount是v3还是v4?
命令如下: nfsstat –m nfsstat –m | grep /home/mymnt 参考资料 ============ https://unix.stackexchange.com/ques ...
- Jetpack 架构组件 Lifecycle 生命周期 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- intel 汇编中断解释
汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用. 显示服务 (Video Service: ...
- Eclipse Maven项目报错2之A child container failed during start
问题:在同事那里拿了一个Eclipse的maven项目,导入报错,主要显示的是A child container failed during start 具体错误如下 六月 02, 2018 12:0 ...
- Redis集群搭建最佳实践
要搭建Redis集群.首先得考虑以下的几个问题; Redis集群搭建的目的是什么?或者说为什么要搭建Redis集群? Redis集群搭建的目的事实上也就是集群搭建的目的.全部的集群主要都是为了解决一个 ...
- 用 CSS 实现元素垂直居中,有哪些好的方案?
1.不知道自己高度和父容器高度的情况下, 利用绝对定位只需要以下三行: parentElement{ position:relative; } childElement{ position: abso ...
- poj 3042 Grazing on the Run
这个题目原型应该是吃完所有的草丛的最小时间,现在变成了每个草丛被吃的时间和,貌似如果还是按照原来的dp方法dp[i][j]表示吃完i到j的草丛的花掉的时间的话,有两个因素会影响后面的决策,一个是花掉的 ...