zoukankan      html  css  js  c++  java
  • OpenCV——边缘检测(sobel算子、Laplacian算子、scharr滤波器)

     1 #include <opencv2/opencv.hpp>
     2 #include <iostream>
     3 
     4 using namespace cv;
     5 using namespace std;
     6 
     7 
     8 int main(int argc, char** argv)
     9 {
    10     Mat src = imread("test.jpg");
    11     Mat dst, gray,grad_x, gray_y,abs_grad_x,abs_grad_y;
    12 
    13 
    14     //转成灰度图
    15     cvtColor(src, gray, COLOR_BGR2GRAY);
    16 
    17     //均值滤波降噪,也可以用其他滤波方法
    18     blur(gray, src, Size(3, 3));
    19 
    20     //运行Sobel算子,得到边缘
    21     //求x方向梯度
    22     Sobel(src, grad_x, CV_16S, 1, 0, 3);
    23     convertScaleAbs(grad_x, abs_grad_x);//提取的深度图片进行显示时,由于是16位图片,要将图片转化成为8位图形进行显示 
    24     imshow("x方向的sobel", abs_grad_x);
    25 
    26     //运行Sobel算子,得到边缘
    27     //求y方向梯度
    28     Sobel(src, gray_y, CV_16S, 0, 1, 3);
    29     convertScaleAbs(gray_y, abs_grad_y);
    30     imshow("y方向的sobel", abs_grad_y);
    31 
    32     //合并梯度
    33     addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst);
    34 
    35 
    36     imshow("合成的整体效果图", dst);
    37     
    38     waitKey(0);
    39     return 0;
    40 
    41 }

     convertScaleAbs函数
    线性变换转换输入数组元素成8位无符号整型。
    void convertScaleAbs(InputArray src, OutputArray dst, double alpha=1, double beta=0)
    参数 :
    src – 输入数组。
    dst – 输出数组。
    alpha – 可选缩放比例常数。
    beta – 可选叠加到结果的常数。
    对于每个输入数组的元素函数convertScaleAbs 进行三次操作依次是:缩放,得到一个绝对值,转换成无符号8位类型。
    对于多通道矩阵,该函数对各通道独立处理。如果输出不是8位,将调用Mat::convertTo 方法并计算结果的绝对值。

    addWeighted函数
    计算两个矩阵的加权和。
    void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, intdtype=-1)
    参数 
    src1 – 第一个输入数组。
    alpha – 第一个数组的加权系数。
    src2 – 第二个输入数组,必须和第一个数组拥有相同的大小和通道。
    beta – 第二个数组的加权系数。
    dst – 输出数组,和第一个数组拥有相同的大小和通道。
    gamma – 对所有和的叠加的常量。
    dtype – 输出数组中的可选的深度,当两个数组具有相同的深度,此系数可设为-1,意义等同于选择与第一个数组相同的深度。
    在多通道情况下,每个通道是独立处理的,该函数可以被替换成一个函数表达式:
    dst = src1*alpha + src2*beta + gamma;

     

     1 #include <opencv2/opencv.hpp>
     2 #include <iostream>
     3 
     4 using namespace cv;
     5 using namespace std;
     6 
     7 
     8 int main(int argc, char** argv)
     9 {
    10     Mat src = imread("test.jpg");
    11     Mat dst, gray;
    12 
    13     //滤波降噪
    14     GaussianBlur(src, src, Size(3, 3),0,0,BORDER_DEFAULT);
    15 
    16     //转成灰度图
    17     cvtColor(src, gray, COLOR_BGR2GRAY);
    18 
    19     //运行Sobel算子,得到边缘
    20     //求x方向梯度
    21     //Laplacian(src, dst, CV_16S, 3, 1,0,BORDER_DEFAULT);
    22     Laplacian(src, dst, CV_16S);//后几个参数有默认值
    23 
    24     //由于是16位图片,需要将图片转化成为8位图形进行显示 
    25     convertScaleAbs(dst, dst);
    26         
    27     imshow("效果图", dst);
    28     
    29     waitKey(0);
    30     return 0;
    31 
    32 }

     

     1 #include <opencv2/opencv.hpp>
     2 #include <iostream>
     3 
     4 using namespace cv;
     5 using namespace std;
     6 
     7 
     8 int main(int argc, char** argv)
     9 {
    10     Mat src = imread("test.jpg");
    11     Mat dst, gray,grad_x, grad_y,abs_grad_x,abs_grad_y;
    12 
    13     
    14     //转成灰度图(sobel和scharr可以不用转换成灰度图)
    15     cvtColor(src, gray, COLOR_BGR2GRAY);
    16 
    17     //均值滤波降噪,也可以用其他滤波方法
    18     blur(gray, src, Size(3, 3));
    19 
    20     //运行Sobel算子,得到边缘
    21     //求x方向梯度
    22     Scharr(src, grad_x, CV_16S, 1, 0);
    23     convertScaleAbs(grad_x, abs_grad_x);//提取的深度图片进行显示时,由于是16位图片,想将图片转化成为8位图形进行显示 
    24     imshow("x方向的Scharr", abs_grad_x);
    25 
    26     //运行Sobel算子,得到边缘
    27     //求y方向梯度
    28     Scharr(src, grad_y, CV_16S, 0, 1);
    29     convertScaleAbs(grad_y, abs_grad_y);
    30     imshow("y方向的Scharr", abs_grad_y);
    31 
    32     //合并梯度
    33     addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst);
    34 
    35 
    36     imshow("合成的整体效果图", dst);
    37     
    38     waitKey(0);
    39     return 0;
    40 
    41 }
  • 相关阅读:
    基本MVVM 和 ICommand用法举例(转)
    WPF C# 命令的运行机制
    628. Maximum Product of Three Numbers
    605. Can Place Flowers
    581. Shortest Unsorted Continuous Subarray
    152. Maximum Product Subarray
    216. Combination Sum III
    448. Find All Numbers Disappeared in an Array
    268. Missing Number
    414. Third Maximum Number
  • 原文地址:https://www.cnblogs.com/long5683/p/9675691.html
Copyright © 2011-2022 走看看