码迷,mamicode.com
首页 > 其他好文 > 详细

OpenCV学习代码记录——canny边缘检测

时间:2018-04-05 13:22:06      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:open   判断   https   body   拷贝   cal   empty   改变   算子   

很久之前学习过一段时间的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边缘检测

标签:open   判断   https   body   拷贝   cal   empty   改变   算子   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!