opencv边缘检测 roberts算子
程序员文章站
2022-07-14 11:19:26
...
定义roberts两个算子 分别为135度 和45度。
[1,0, 0,-1] [0,1 -1,0]
这里展示在c++实现的过程。先展示下效果图 分别是45度角 135度角和边缘效果图。
#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
//roberts 边缘检测
void roberts(InputArray src, OutputArray dst, int ddepth, int x = 1, int y = 0, int borderType = BORDER_DEFAULT)
{
CV_Assert(!(x == 0 && y == 0));
Mat roberts_1 = (Mat_<float>(2, 2) << 1, 0, 0, -1);
Mat roberts_2 = (Mat_<float>(2, 2) << 0, 1, -1, 0);
//当x不等于0 src和roberts_1卷积
if (x != 0 && y == 0)
{
conv2D(src, roberts_1, dst, ddepth, Point(0, 0), borderType);
}
//当y不等于0 src和roberts_2卷积
if (y != 0 && x == 0)
{
conv2D(src, roberts_2, dst, ddepth, Point(0, 0), borderType);
}
}
int main()
{
Mat m = imread("E:/CPPProject/openCV/1.jpg");
if (!m.data)
return -1;
Mat img_roberts_1;
roberts(m, img_roberts_1, CV_32FC1, 1, 0);
//图像矩阵和roberts_2卷积
Mat img_roberts_2;
roberts(m, img_roberts_2, CV_32FC1, 0, 1);
//两个卷积结果的灰度级显示
Mat abs_img_roberts_1, abs_img_roberts_2;
convertScaleAbs(img_roberts_1, abs_img_roberts_1, 1, 0);
convertScaleAbs(img_roberts_2, abs_img_roberts_2, 1, 0);
imshow("135度 方向边缘", abs_img_roberts_1);
imshow("45度 方向边缘", abs_img_roberts_2);
//第三部 通过第二部得到的两个卷积结果 求出最终的边缘强度
//这里采用平方根的方式
Mat img_roberts_1_2, img_roberts_2_2;
pow(img_roberts_1, 2.0, img_roberts_1_2);
pow(img_roberts_2, 2.0, img_roberts_2_2);
Mat edge;
sqrt(img_roberts_1_2 + img_roberts_2_2, edge);
//数据类型转换 边缘强度的灰度级现实
edge.convertTo(edge, CV_8UC1);
//edge.convertTO(edge, CV_8UC1);
imshow("边缘强度", edge);
/*namedWindow("I", 1);
Mat a = gaussBlur(m,Size(3,3),3.0);
imshow("a", a);*/
waitKey(0);
return 0;
}
推荐阅读
-
C#图像边缘检测(Roberts)的方法
-
基于opencv下对视频的灰度变换,高斯滤波,canny边缘检测处理,同窗体显示并保存
-
Python使用Opencv实现边缘检测以及轮廓检测的实现
-
Python+OpenCV 图像边缘检测四种实现方法
-
OpenCV图像处理教程C++(十五)边缘检测算法--sobel算子、拉普拉斯算子、Canny算子
-
【OpenCV】边缘检测:Sobel、拉普拉斯算子
-
python—opencv图像膨胀|图像腐蚀|图像边缘检测sobel算子/拉普拉斯算子/canny算子
-
Opencv图像处理——边缘处理Sobel、拉普拉斯算子
-
【OpenCV3经典编程100例】(08)边缘检测:拉普拉斯算子Laplacian()
-
使用OpenCV进行模糊检测(拉普拉斯算子)