zoukankan      html  css  js  c++  java
  • opencv学习之路(17)、边缘检测

     一、概述

    二、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 }

    注意:canny边缘检测后,图像为灰度图!

    三、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)|

  • 相关阅读:
    CVTE前端一面
    转载几篇看过的几篇使用技术博文
    Vue自定义指令
    node项目初始化的一些配置
    vue+element 实现在表格内插入其他组件,每行数据独立存储
    jquery如何实现当页面下拉到一定位置时,右下角出现回到顶部图标
    css实现垂直居中的方法整理
    css3兼容性检测工具
    css变换与动画详解
    手机访问电脑端网站偏问题解决
  • 原文地址:https://www.cnblogs.com/little-monkey/p/7277019.html
Copyright © 2011-2022 走看看