码迷,mamicode.com
首页 > 其他好文 > 详细

opencv学习之路(17)、边缘检测

时间:2017-08-02 23:25:39      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:ann   使用   text   学习   无符号   img   dia   建议   add   

 

一、概述

技术分享

二、canny边缘检测

技术分享

技术分享

 1 #include "opencv2/opencv.hpp"
 2 using namespace cv;
 3 
 4 void main()
 5 {
 6     //Canny边缘检测
 7     Mat srcImg = imread("E://1.png",0); //0表示以灰度图读入,彩色图和灰度图进行边缘检测时略有不同,建议使用灰度图
 8     //medianBlur(srcImg, srcImg,5);//中值滤波
 9     imshow("src", srcImg);
10 
11     Mat dstImg;
12     Canny(srcImg, dstImg, 30, 80);
13     imshow("Canny", dstImg);
14     waitKey(0);
15 }

技术分享

Canny边缘检测小应用——检测工件是否平整,检测布料是否平滑

 1 #include "opencv2/opencv.hpp"
 2 using namespace cv;
 3 
 4 Mat src,dst;
 5 int min_thres=30,max_thres=100;//不能直接命名为min,max,标准库std里有min和max方法
 6 
 7 void onCanny(int,void*){
 8     Canny(src, dst,min_thres,max_thres);
 9     imshow("src",src);    
10     imshow("Canny", dst);
11 }
12 
13 void main()
14 {
15     src=imread("E://9.jpg",0);
16     namedWindow("Canny",CV_WINDOW_AUTOSIZE);
17     createTrackbar("min_thres","Canny",&min_thres,255,onCanny,0);
18     createTrackbar("max_thres","Canny",&max_thres,255,onCanny,0);
19 
20     onCanny(min_thres,0);//回调函数初始化
21     onCanny(max_thres,0);
22 
23     waitKey(0);
24     destroyAllWindows();
25 }

技术分享

三、Sobel算子(带方向,分x,y方向)

技术分享

技术分享

 1 #include "opencv2/opencv.hpp"
 2 using namespace cv;
 3 
 4 void main()
 5 {
 6     Mat grad_x, grad_y;
 7     Mat abs_grad_x, abs_grad_y, dst;
 8 
 9     Mat src = imread("E://5.jpg", 0);
10     imshow("src", src);
11 
12     Sobel(src, grad_x, CV_16S, 1, 0, 3);//16位有符号(求导时有正负),x方向参数设置为1,0
13     convertScaleAbs(grad_x, abs_grad_x);//转为无符号
14     imshow("X方向", abs_grad_x);
15 
16     Sobel(src, grad_y, CV_16S, 0, 1, 3);//y方向参数设置为0,1
17     convertScaleAbs(grad_y, abs_grad_y);
18     imshow("Y方向", abs_grad_y);
19 
20     addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst);
21     imshow("合并效果", dst);
22 
23     waitKey(0);
24     destroyAllWindows();
25 }

技术分享

四、Laplacian算子(二阶,带方向)

 技术分享

 1 #include "opencv2/opencv.hpp"
 2 using namespace cv;
 3 
 4 void main()
 5 {
 6     Mat src,dst,abs_dst;
 7     src = imread("E://lena.jpg", 0);
 8     imshow("src", src);
 9 
10     Laplacian(src, dst, CV_16S, 3);
11     convertScaleAbs(dst, abs_dst);
12     imshow("Laplacian", abs_dst);
13 
14     waitKey(0);
15     destroyAllWindows();
16 }

技术分享

 五、其他

Z1  Z2  Z3
 Z4  Z5  Z6
 Z7  Z8  Z9

 

 

 

 

Robets交叉梯度算子:▽f≈|Z9-Z5|+|Z8-Z6|

Prewitt梯度算子:▽f≈|(Z7+Z8+Z9)-(Z1+Z2+Z3)|+|(Z3+Z6+Z9)-(Z1+Z4+Z7)|

Sobel梯度算子:▽f≈|(Z7+2Z8+Z9)-(Z1+2Z2+Z3)|+|(Z3+2Z6+Z9)-(Z1+2Z4+Z7)|

opencv学习之路(17)、边缘检测

标签:ann   使用   text   学习   无符号   img   dia   建议   add   

原文地址:http://www.cnblogs.com/little-monkey/p/7277019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!