b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

canny边缘检测matlab_opencv sobel边缘检测_opencv canny边缘检测代码

电脑杂谈  发布时间:2017-02-24 01:12:37  来源:网络整理

canny边缘检测matlab_opencv canny边缘检测代码_opencv sobel边缘检测

opencv canny边缘检测代码

图像的边缘检测的原理是检测出图像中所有灰度变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。opencv canny边缘检测代码

Canny边缘检测算子是John F. Canny于1986年开发出来的一个多级边缘检测算法。Canny边缘检测的数学原理和算法实现这里就不再了,有兴趣的读者可以查阅书籍,本文主要介绍如何在OpenCV中对图像进行Canny边缘检测,下面就来看看这个函数的原型。

一. 主要函数1.1 cvCanny

函数功能:采用Canny方法对图像进行边缘检测

函数原型:

voidcvCanny(

constCvArr*image,

CvArr*edges,

doublethreshold1,doublethreshold2,

intaperture_size=3

);

函数说明:

第一个参数表示输入图像,必须为单通道灰度图。

第二个参数表示输出的边缘图像,为单通道黑白图。

第三个参数和第四个参数表示阈,这二个阈中当中的小阈用来控制边缘连接,大的阈用来控制强边缘的初始分割即如果一个像素的梯度大与上限,则被认为是边缘像素,如果小于下限阈,则被抛弃。如果该点的梯度在两者之间则当这个点与高于上限的像素点连接时我们才保留,否则删除。

第五个参数表示Sobel算子大小,默认为3即表示一个3*3的矩阵。Sobel算子与高斯拉普拉斯算子都是常用的边缘算子,详细的数学原理可以查阅书籍。

为了更好的使用cvCanny()函数,下面再介绍二个实用的函数,这二个函数对后面的程序实现非常有帮助。

1.2 cvCreateTrackbar

函数功能:创建trackbar并添加到指定窗口

函数原型:

intcvCreateTrackbar(

constchar*trackbar_name,

constchar*window_name,

int*value,

intcount,

CvTrackbarCallbackon_change

);

函数说明:

第一个参数表示该trackbar的名称。

第二个参数表示窗口名称,该trackbar将显示在这个窗口内。

第三个参数表示创建时滑块的位置。

第四个参数表示滑块位置的最大,最小固定为0。

第五个参数表示回调函数。当滑块位置有变化时,系统会调用该回调函数。

注:被创建的trackbar默认显示在指定窗口的顶端,可以通过函数cvGetTrackbarPos()来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos()来重新设置trackbar的显示位置。

1.3 CvTrackbarCallback

函数功能:cvCreateTrackbar()函数所使用的回调函数

函数定义:

typedef void (CV_CDECL *CvTrackbarCallback)(int pos)

函数说明:

当trackbar位置被改变的时,系统会调用这个回调函数,并将参数pos设置为表示trackbar位置的数。

二. 示例程序代码

//图像的Canny边缘检测
#include <opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;

IplImage *g_pSrcImage, *g_pCannyImg;
const char *pstrWindowsCannyTitle = "边缘检测图";

//cvCreateTrackbar的回调函数
void on_trackbar(int threshold)
{
	//canny边缘检测
	cvCanny(g_pSrcImage, g_pCannyImg, threshold, threshold * 3, 3);
	cvShowImage(pstrWindowsCannyTitle, g_pCannyImg);
}
int main(int argc,int **argv)
{
	const char *pstrImageName = "D:/lena.jpg";
	const char *pstrWindowsSrcTitle = "原图";
	const char *pstrWindowsToolBar = "Threshold";

	//从文件中载入图像的灰度图CV_LOAD_IMAGE_GRAYSCALE - 灰度图
	g_pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_GRAYSCALE);
	g_pCannyImg = cvCreateImage(cvGetSize(g_pSrcImage), IPL_DEPTH_8U, 1);

	//创建窗口
	cvNamedWindow(pstrWindowsSrcTitle, CV_WINDOW_AUTOSIZE);
	cvNamedWindow(pstrWindowsCannyTitle, CV_WINDOW_AUTOSIZE);

	//创建滑动条
	int nThresholdEdge = 1;
	cvCreateTrackbar(pstrWindowsToolBar, pstrWindowsCannyTitle, &nThresholdEdge, 100, on_trackbar);

	//在指定窗口中显示图像
	cvShowImage(pstrWindowsSrcTitle, g_pSrcImage);
	on_trackbar(1);

	//等待按键事件
	cvWaitKey();

	cvDestroyWindow(pstrWindowsSrcTitle);
	cvDestroyWindow(pstrWindowsCannyTitle);
	cvReleaseImage(&g_pSrcImage);
	cvReleaseImage(&g_pCannyImg);
	return 0;
}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-34139-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...