图像梯度 – 更多梯度算子

  • 知识点
  • python代码
  • c++代码

知识点

图像梯度 – 更多梯度算子
图像的一阶导数算子除了sobel算子之外,常见的还有robert算子prewitt算子,它们也都是非常好的可以检测图像的梯度边缘信息。

通过OpenCV中自定义滤波器,使用自定义创建的robert与prewitt算子就可以实现图像的rober与prewitt梯度边缘检测,OpenCV中的自定义算子滤波函数如下:

filter2D(
InputArray src,
OutputArray dst,
int ddepth,
InputArray kernel,
Point anchor = Point(-1,-1),
double delta = 0,
int borderType = BORDER_DEFAULT
)
Python:
dst =cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])

python代码

import cv2 as cv
import numpy as npsrc = cv.imread("C:/Users/qqxd/Desktop/opencvcode/images/lena.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)robert_x = np.array([[1, 0],[0, -1]], dtype=np.float32)
robert_y = np.array([[0, -1],[1, 0]], dtype=np.float32)prewitt_x = np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]], dtype=np.float32)
prewitt_y = np.array([[-1, -1, -1], [0, 0, 0], [1, 1, 1]], dtype=np.float32)robert_grad_x = cv.filter2D(src, cv.CV_16S, robert_x)
robert_grad_y = cv.filter2D(src, cv.CV_16S, robert_y)
robert_grad_x = cv.convertScaleAbs(robert_grad_x)
robert_grad_y = cv.convertScaleAbs(robert_grad_y)prewitt_grad_x = cv.filter2D(src, cv.CV_32F, prewitt_x)
prewitt_grad_y = cv.filter2D(src, cv.CV_32F, prewitt_y)
prewitt_grad_x = cv.convertScaleAbs(prewitt_grad_x)
prewitt_grad_y = cv.convertScaleAbs(prewitt_grad_y)# cv.imshow("robert x", robert_grad_x);
# cv.imshow("robert y", robert_grad_y);
# cv.imshow("prewitt x", prewitt_grad_x);
# cv.imshow("prewitt y", prewitt_grad_y);h, w = src.shape[:2]
robert_result = np.zeros([h, w*2, 3], dtype=src.dtype)
robert_result[0:h,0:w,:] = robert_grad_x
robert_result[0:h,w:2*w,:] = robert_grad_y
cv.imshow("robert_result", robert_result)prewitt_result = np.zeros([h, w*2, 3], dtype=src.dtype)
prewitt_result[0:h,0:w,:] = prewitt_grad_x
prewitt_result[0:h,w:2*w,:] = prewitt_grad_y
cv.imshow("prewitt_result", prewitt_result)cv.imwrite("D:/prewitt.png", prewitt_result)
cv.imwrite("D:/robert.png", robert_result)cv.waitKey(0)
cv.destroyAllWindows()

c++代码

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int artc, char** argv) {Mat src = imread("C:/Users/qqxd/Desktop/opencvcode/images/lena.png");if (src.empty()) {printf("could not load image...\n");return -1;}namedWindow("input", WINDOW_AUTOSIZE);imshow("input", src);Mat robert_x = (Mat_<int>(2, 2) << 1, 0, 0, -1);Mat robert_y = (Mat_<int>(2, 2) << 0, -1, 1, 0);Mat prewitt_x = (Mat_<char>(3, 3) << -1, 0, 1,-1, 0, 1,-1, 0, 1);Mat prewitt_y = (Mat_<char>(3, 3) << -1, -1, -1,0, 0, 0,1, 1, 1);Mat robert_grad_x, robert_grad_y, prewitt_grad_x, prewitt_grad_y;filter2D(src, robert_grad_x, CV_16S, robert_x);filter2D(src, robert_grad_y, CV_16S, robert_y);convertScaleAbs(robert_grad_x, robert_grad_x);convertScaleAbs(robert_grad_y, robert_grad_y);filter2D(src, prewitt_grad_x, CV_32F, prewitt_x);filter2D(src, prewitt_grad_y, CV_32F, prewitt_y);convertScaleAbs(prewitt_grad_x, prewitt_grad_x);convertScaleAbs(prewitt_grad_y, prewitt_grad_y);printf("image gradient...");imshow("robert x", robert_grad_x);imshow("robert y", robert_grad_y);imshow("prewitt x", prewitt_grad_x);imshow("prewitt y", prewitt_grad_y);waitKey(0);return 0;
}

运行结果如下:

Opencv-自定义梯度算子相关推荐

  1. OpenCV图像梯度算子

            梯度简单来说就是求导.         OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和 Laplacian.         Sobel,Sc ...

  2. 【youcans 的 OpenCV 例程200篇】150. 边缘检测梯度算子

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  3. 【OpenCV】32 图像梯度–更多梯度算子(rober算子、prewitt算子)

    32 图像梯度–更多梯度算子(rober算子.prewitt算子) 代码 import cv2 as cv import numpy as npsrc = cv.imread("../ima ...

  4. opencv for python的图像梯度算子以及canny边缘检测

    opencv for python的图像梯度算子以及canny边缘检测 一.图像梯度算子: 二.Canny边缘检测(一个多级边缘检测算法): 一.图像梯度算子: 1.概念简介(部分引自百度百科): 图 ...

  5. 【OpenCV 例程300篇】250. 梯度算子的传递函数

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程300篇]250. 梯度算子的传递函数 1. 空间卷积与频域滤波 空间域图像滤波是图像与滤波器核 ...

  6. OpenCV图像锐化(梯度算子Sobel)

    梯度算子 •    梯度通过一个二维列向量来定义 •    向量的模值 实践中通常称为梯度图像. • 考虑一个3x3的图像区域,z代表 灰度级,上式在点z5的f值可用 数字方式近似. • 微分滤波器 ...

  7. 【图像处理】——Python图像分割边缘检测算法之一阶梯度算子(Roberts、Prewitt、Sobel、 Kirsch、Canny算子)

    目录 前言 一.边缘检测算法 1.一阶算子 2.二阶算子 二.一阶算子 原图像lena 1.Roberts算子 不同方向的算子模板 梯度的计算 系统代码: 自定义函数代码 结果 2.Prewitt 不 ...

  8. 【图像处理】——Python图像分割边缘检测算法之二阶梯度算子(laplace、log、dog算子)

    目录 一.二阶算子简介 二.laplace(拉普拉斯算子) 1.什么是拉普拉斯算子 (1)连续二维函数的二阶导 (2)离散二维函数的二阶导数 2.常用算子模块及代码 3.结果 三.log算子 1.什么 ...

  9. 数字图像处理--图像梯度算子的本质

    前面我们介绍过图像的梯度,其定义是根据微积分的定义在二维离散函数中推导出来的.但是,我们需要理解,梯度只是一个工具,方法,核心目的是得到像素点与其相邻像素的灰度值变化情况,并通过这种变化来增强图像.这 ...

最新文章

  1. 给初学者的深度学习入门指南
  2. vector机器人 CAN I USE MULTIPLE VECTORS OR DEVICES? 我可以使用多个向量或设备吗?
  3. python安装tensorflow_tensorflow安装过程-(windows环境下)---详解(摆平了很多坑!)...
  4. nohup 带参数_广州市西门子两通阀VVF42.40-25C+SKD62带断电
  5. ASP.NET Core 依赖注入-集成 Autofac
  6. smarty 引用php类,smarty 的PHP引用
  7. 个人计算机的防毒软件无法防御,在win10系统中无法启动defender防御软件的解决方法...
  8. 没有上市的股权和股票有啥区别
  9. k阶原点距和k阶中心距各是说明什么数字特征
  10. 小米平板2wifi驱动下载_小米WiFi驱动官方下载_Xiaomi小米随身WiFi驱动官方最新版下载-华军软件园...
  11. 学习外挂 -------- 成长过程(经典推荐)
  12. tdscdma的matlab仿真,基于MATLAB的TDSCDMA调制解调仿真
  13. 块截断编码图像压缩技术
  14. 虚拟机上部署Envoy Gateway:(一)创建虚拟机
  15. Dijkstra迪杰斯特算法(C++版本和JAVA版本)
  16. HP M132snw 打印机如何在换路由器的时候更换整个局域网配置?
  17. 解决vue + elementUI 渲染图片问题
  18. 回首2015年小文codeRoad
  19. PASCAL VOC 2012数据集及其增强版介绍
  20. 【前端学习笔记】09全方位了解flex布局

热门文章

  1. Python中max函数key的用法详解
  2. ZMY_HTttpUtils获取网络信息
  3. 建模小白适合从什么3D建模软件入手学习?
  4. ppm图像格式及浏览
  5. 这三个方法让你知道音频英译汉如何操作?
  6. 图像分割库segmentation_models.pytorch和Albumentations 实现图像分割
  7. 小程序 长按识别二维码
  8. 公众号被关注后自动回复两条消息,文字+图片是如何实现的?
  9. wamp server下bugzilla的安装与配置
  10. 组织机构代码生成规则