#include
#include
#include
using namespace std;
using namespace cv;
IplImage *dopyrDown(IplImage *in,int filter = IPL_GAUSSIAN_5x5)
{
//assert(in->width%2 == 0 && in->height%2 == 0);
//一个断言要求图像的长宽是偶数
IplImage *out = cvCreateImage(cvSize(in->width/2,in->height/2),in->depth,in->nChannels);
cvPyrDown(in,out);
return out;
}
//to split the image
IplImage *transform(IplImage *in)
{
IplImage *dst;
IplImage *dst1;
IplImage *dst2;
IplImage *dst3;
dst1 = cvCreateImage(cvSize(in->width,in->height),IPL_DEPTH_8U,1);
//得到该图片的三个通道
dst2 = cvCreateImage(cvSize(in->width,in->height),IPL_DEPTH_8U,1);
dst3 = cvCreateImage(cvSize(in->width,in->height),IPL_DEPTH_8U,1);
//dst =cvCreateImage(cvSize(in->width,in->height),IPL_DEPTH_8U,3);
cvSplit(in,dst1,dst2,dst3,0);
//分离RGB通道得到rgb单通道的图片
//cvMerge(dst1,dst2,dst3,0,dst);
//逆运算,合成
return dst1;
}
//canny edge detection
IplImage *docanny(IplImage *in,double lowthresh,double highthresh,double aperture)
{
if (in->nChannels != 1)
return 0;
//this step why?because only gray scale image can be handled by canny
IplImage *out = cvCreateImage(cvGetSize(in),IPL_DEPTH_8U,1);
cvCanny(in,out,lowthresh,highthresh,aperture);
return out;
}void main()
{
IplImage *image = cvLoadImage("C:\\1.jpg");
IplImage *dst = transform(image);
//保存其中的一个通道
cvNamedWindow("example4-in");
cvNamedWindow("example4-out");
cvShowImage("example4-in",image);
cvShowImage("example4-pyrdown",dopyrDown(image));
cvShowImage("example4-canny",docanny(dst,50,150,3));
//imshow("example4-in",image);
//Mat out = cvCreateImage(cvGetSize(&image),IPL_DEPTH_8U,3);
IplImage *out = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,3);
cvSmooth(image,out,CV_GAUSSIAN,3,3,0,0);
//高斯平滑
cvShowImage("example4-out",out);
cvReleaseImage(&out);
waitKey(0);
cvDestroyAllWindows();
system("pause");
}
在写这个程序的时候老是在canny算法那么显示不出来,最后才发现人家这个函数要求必须是单通道的图像,对其不明白,baidu了一下ok,所以我参照 一叶障目的博客 http://blog.sina.com.cn/u/1748729840 这个人的文章修改了我的程序,ok了。
【opencv 学习第二天 学习opencv(中文版)对一幅图片进行canny边缘检测】
文章图片
推荐阅读
- 人脸识别|【人脸识别系列】| 实现自动化妆
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- opencv|图像处理之椒盐噪声的添加与去除
- 人脸识别|【人脸识别系列】| 实现人脸截图保存并编写128维特征向量
- opencv|网络爬虫入门练习
- OpenCV|【OpenCV 完整例程】89. 带阻滤波器的传递函数
- OpenCV|【OpenCV 完整例程】90. 频率域陷波滤波器
- OpenCV|【OpenCV 完整例程】22. 图像添加非中文文字
- OpenCV|【OpenCV 完整例程】91. 高斯噪声、瑞利噪声、爱尔兰噪声
- opencv|python+opencv车道线,实线虚线的检测