OpenCV开发——Canny边缘检测

Home / C++ MrLee 2015-6-26 3641

边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。 这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。 边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。
先看下效果图:

Image:Example-edge.png


以下是C++语言版本
/**************************************************
 * C++ Canny:Canny边缘检测
 **************************************************/
 
/***********************************************************************
 * OpenCV example
 * By Min Qi February 26, 2012, Indianapolis, IN
 ***********************************************************************/
 
#include "cv.hpp"
#include "cxcore.hpp"
#include "opencv2highguihighgui.hpp"
 
using namespace cv;
using namespace std;
 
int edgeThresh = 1;
 
// 声明 原始图片,灰度图片,和 canny边缘图片
	Mat image, cedge;
	Mat gray, edge;
 
void onTrackbar(int, void*)
{
	//blur 灰度图片
	blur(gray, edge, Size(3,3));
 
	// Canny 边缘检测
	Canny(gray,edge, edgeThresh, edgeThresh*3, 3);
 
	//全部设为0
	cedge = Scalar::all(0);
 
	//拷贝边缘的象素点
	image.copyTo(cedge, edge);
 
	imshow("Edge map", edge);
 
}
 
int main(int argc, char** argv)
{
 
 
	// 载入图片
	image = imread(argv[1], 1);
 
	// 判断载入图片是否成功
	if(image.empty())
	{
		printf("miss the image file: %d n", argv[1]);
		return -1;
	}
 
	// 生成灰度图片,因为只有灰度图片才能生成边缘图片
         cedge.create(image.size(), image.type());
	cvtColor(image,gray, CV_BGR2GRAY);
 
	//新建一个窗口
	namedWindow("Edge map", 1);
 
	// 生成一个进度条来控制边缘检测
	createTrackbar("Canny Threshold", "Edge map", &edgeThresh, 100, onTrackbar);
 
	//初始化图像
	onTrackbar(0,0);
 
	waitKey(0);
 
	return 0;
}

本文链接:https://www.it72.com/3589.htm

推荐阅读
最新回复 (0)
返回