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);
}

原文地址:https://www.cnblogs.com/oloroso/p/8721981.html

时间: 2024-10-23 18:45:39

OpenCV学习代码记录——canny边缘检测的相关文章

OpenCV学习代码记录——Hough线段检测

很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tree/master/OpenCVTest #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> // http://blog.csdn.net/zh

OpenCV学习代码记录——轮廓(contour)检测

很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tree/master/OpenCVTest #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> // cv

OpenCV学习代码记录—— Snake轮廓

很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tree/master/OpenCVTest #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/legac

OpenCV学习代码记录——人脸检测

很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tree/master/OpenCVTest #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/objdetect.hpp> #include <opencv2/img

实战深度学习OpenCV(一):canny边缘检测

利用canny边缘检测,我们可以很好地得到哦一个图像的轮廓,下面是基于C++的,这是我们通过这段代码得到的结果: #include "pch.h" #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> using namespace c

opencv第三课 Canny边缘检测

#include<stdio.h> #include<iostream> #include<opencv2\opencv.hpp> using namespace std; using namespace cv; IplImage *g_psrcimage,*g_pcannyima; void on_trackbar(int threshold) { cvCanny(g_psrcimage,g_pcannyima,threshold,threshold*3,3); cv

OpenCV学习 3:平滑过度与边缘检测

原创文章,欢迎转载,转载请注明出处  用来记录学习的过程,这个是简单的相关函数的熟悉,内部机制和选择何种选择函数参数才能达到自己的要求还不太清楚,先学者吧..后面会慢慢清楚的.     和前面相比,主要用了三个新的函数cvCreateImage,cvSmooth,cvCanny.      cvCreateImage用来创建分配图像空间,创建两个,分别保存平滑处理后的图片,然后将平滑处理后的图片(相当于滤波了)进行边缘检测..代码很简单,opencv很强大,简单的几个函数就完成了如此牛逼的东西.

基于opencv下对视频的灰度变换,高斯滤波,canny边缘检测处理,同窗体显示并保存

如题:使用opencv打开摄像头或视频文件,实时显示原始视频,将视频每一帧依次做灰度转换.高斯滤波.canny边缘检测处理(原始视频和这3个中间步骤处理结果分别在一个窗口显示),最后将边缘检测结果保存为一个视频avi文件. 这里问题综合性比较大,这里进行分治. 该类问题可分为四个方面的处理: (1)打开 视频或者是摄像头,并播放视频 (2)对视频的每一帧做处理 (3)同窗体显示四个结果 (4)保存视频文件 以下分为这三个方面进行处理: (1)打开 视频或者摄像头,并播放视频 这个利用opencv

openCV实例:Canny边缘检测

http://blog.sina.com.cn/s/blog_737adf530100z0jk.html 在第一次使用openCV程序成功对图像进行打开后,现在开始试验第二个例程试验:Canny边缘检测 这里算法原理和具体编程语句都先不管,因为作为一名新手(反正我是这么感觉的),拿些现成的程序跑出效果才是让人很有feel的. 先贴下原代码: #include "cv.hpp"#include "cxcore.hpp"#include "opencv2\hi