OpenCV学习Canny


#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>

using namespace cv;

/// 全局变量

Mat src, src_gray;
Mat dst, detected_edges;

int edgeThresh = 1;
int lowThreshold;
int const max_lowThreshold = 100;
int ratio = 3;
int kernel_size = 3;
char* window_name = "Edge Map";

/**
* @函数 CannyThreshold
* @简介: trackbar 交互回调 - Canny阈值输入比例1:3
*/
void CannyThreshold(int, void*)
{
	/// 使用 3x3内核降噪
	blur(src_gray, detected_edges, Size(3, 3));

	/// 运行Canny算子
	/*
	Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size );
	输入参数:
	detected_edges: 原灰度图像
	detected_edges: 输出图像 (支持原地计算,可为输入图像)
	lowThreshold: 用户通过 trackbar设定的值。
	highThreshold: 设定为低阈值的3倍 (根据Canny算法的推荐)
	kernel_size: 设定为 3 (Sobel内核大小,内部使用)
	*/
	Canny(detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size);
	imshow("1",detected_edges);

	/// 使用 Canny算子输出边缘作为掩码显示原图像
	dst = Scalar::all(0);//填充 dst 图像,填充值为0 (图像全黑).

	src.copyTo(dst, detected_edges);//使用函数 copyTo 标识被检测到的边缘部分 (背景为黑色).
	imshow(window_name, dst);
}


/** @函数 main */
int main(int argc, char** argv)
{
	/// 装载图像
	src = imread("C:/Users/dell/Desktop/2.jpg");

	if (!src.data)
	{
		return -1;
	}

	/// 创建与src同类型和大小的矩阵(dst)
	dst.create(src.size(), src.type());

	/// 原图像转换为灰度图像
	cvtColor(src, src_gray, CV_BGR2GRAY);

	/// 创建显示窗口
	namedWindow(window_name, CV_WINDOW_AUTOSIZE);

	/// 创建trackbar
	/*
	createTrackbar( "Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold );
	注意:
	通过trackbar控制的变量为 lowThreshold ,上限为 max_lowThreshold (我们已经设定为100)
	每次用户通过trackbar产生变动,回调函数 CannyThreshold 被调用.
	*/
	createTrackbar("Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold);

	/// 显示图像
	CannyThreshold(0, 0);

	/// 等待用户反应
	waitKey(0);

	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值