首页 > 代码库 > opencv-边缘检测

opencv-边缘检测

// ConsoleApplication3_6_23.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;

Mat src,dst,gray;
int pro_type = 0;
char* windowName = "demo";
char* windowName1 = "demo_pro";
void Image_pro(int,void*);
int _tmain(int argc, _TCHAR* argv[])
{
	src = http://www.mamicode.com/imread("test.png");>
效果:

1、

Sobel( src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT );

该函数接受了以下参数:

  • src_gray: 在本例中为输入图像,元素类型 CV_8U
  • grad_x/grad_y: 输出图像.
  • ddepth: 输出图像的深度,设定为 CV_16S 避免外溢。
  • x_orderx 方向求导的阶数。
  • y_ordery 方向求导的阶数。
  • scaledelta 和 BORDER_DEFAULT: 使用默认值

2、
Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );

函数接受了以下参数:

  • src_gray: 输入图像。
  • dst: 输出图像
  • ddepth: 输出图像的深度。 因为输入图像的深度是 CV_8U ,这里我们必须定义 ddepth = CV_16S 以避免外溢。
  • kernel_size: 内部调用的 Sobel算子的内核大小,此例中设置为3。
  • scaledelta 和 BORDER_DEFAULT: 使用默认值。

Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size );

输入参数:

  • detected_edges: 原灰度图像
  • detected_edges: 输出图像 (支持原地计算,可为输入图像)
  • lowThreshold: 用户通过 trackbar设定的值。
  • highThreshold: 设定为低阈值的3倍 (根据Canny算法的推荐)
  • kernel_size: 设定为 3 (Sobel内核大小,内部使用)