opencv边缘检测算子

article/2025/9/15 3:52:21

实验三 边缘检测算子

一、 实验目的
利用opencv或其他工具编写实现下图的sobel算子和robert算子边缘检测
在这里插入图片描述

二、 实验过程
利用opencv python实现sobel算子和robert算子边缘检测
(1)在python安装opencv库
这个步骤我在第二个实验,图像滤波里写过了,就不再重复了。
(2)编写代码
代码如下:

import cv2 
import numpy as npimg = cv2.imread('E:\\dip_switch_02.bmp')
#反色
def inverse_color(image):height,width,temp = image.shapeimg2 = image.copy()for i in range(height):for j in range(width):img2[i,j]=(255-image[i,j][0],255-image[i,j][1],255-image[i,j][2]) return img2
img1 = inverse_color(img)
cv2.imshow('image',img1)#Sobel边缘检测算子
sobelx = cv2.Sobel(img1,cv2.CV_16S,1,0)
sobely = cv2.Sobel(img1,cv2.CV_16S,0,1)
sobelx = cv2.convertScaleAbs(sobelx)
sobely = cv2.convertScaleAbs(sobely)
sobelXY = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
cv2.imshow('sobel',inverse_color(sobelXY))#Robert边缘检测算子
kernelx = np.array([[-1,0],[0,1]], dtype=int)
kernely = np.array([[0,-1],[1,0]], dtype=int)
x = cv2.filter2D(img1, cv2.CV_16S, kernelx)
y = cv2.filter2D(img1, cv2.CV_16S, kernely)
absX = cv2.convertScaleAbs(x)     
absY = cv2.convertScaleAbs(y)   
Roberts = cv2.addWeighted(absX,0.5,absY,0.5,0)
cv2.imshow('robert',inverse_color(Roberts))
cv2.waitKey(0)
cv2.destroyAllWindows()

三、 运行结果
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

四、 问题及解决方法

(1)反色函数出现错误
在这里插入图片描述
解决方法:
实现图像反色有两种方法:一种是对于灰度图,另一种是对于彩色图,我之前用的函数是实现灰度图的反色,这次的图片是彩色图,就不适用了。
实现图像反色:读取每个像素值P,再将255-P写入新的图片中;
对于灰度图,只有一个通道,所以 img2[i,j] = (255-image[i,j]) ;
对于彩色图片,则要RGB值分别做处理,255-image[i,j][0],255-image[i,j][1],255-image[i,j][2];

(2)在显示多个图片时,要注意窗口名称不能一致,否则只能显示一个窗口,后面的图像会取代前面的图像。

五、 实验总结

这次实验主要是利用opencv实现sobel算子和robert算子边缘检测,在做实验的过程中,我的收获如下:

  1. Sobel算子 Sobel算子是滤波算子的形式来提取边缘,X,Y方向各用一个模板,两个模板组合起来构成一个梯度算子。X方向模板对垂直边缘影响最大,Y方向模板对水平边缘影响最大。
  2. Robert算子 Robert算子是一种梯度算子,它用交叉的查分表示梯度,是一种利用局部差分算子寻找边缘的算子,对具有陡峭的低噪声的图像效果最好。在Python中,Roberts算子主要通过
    Numpy 定义模板,再调用 OpenCV的 filter2D() 函数实现边缘提取。该函数主要是利用内核实现对图像的卷积运算。
    通过实验,掌握了图像反色,sobel算子、robert算子边缘检测的方法。

http://chatgpt.dhexx.cn/article/ZopVKxkg.shtml

相关文章

OpenCV:边缘检测算法

边缘检测(英语:Edge detection)是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、…

opencv边缘检测 roberts算子

定义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> #…

基于QT+OpenCV边缘检测、面积检测

没什么好说的就是调库&#xff0c;直接看下效果图&#xff0c;&#xff0c;基于OPENC4.5.1&#xff0c;如需要请 原图&#xff1a; 对图形进行描边并进行标号 面积检测

【学习OpenCV4】OpenCV边缘检测算法总结

本文分享内容来自图书《学习OpenCV 4&#xff1a;基于Python的算法实战》&#xff0c;该书内容如下&#xff1a; 第1章 OpenCV快速入门&#xff1b; 第2章 图像读写模块imgcodecs&#xff1b; 第3章 核心库模块core&#xff1b; 第4章 图像处理模块imgproc&#xff08;一&…

Opencv边缘检测、轮廓发现、绘制轮廓

Opencv边缘检测、轮廓发现、绘制轮廓 提取图像轮廓的2个步骤 1、 findContours函数找轮廓&#xff0c; 2、 drawContours函数画轮廓 轮廓的查找——cv::findContours() 函数cv::findContour是从二值图像中来计算轮廓的&#xff0c;它可以使用cv::Canny()函数处理的图像&am…

基于Python的Opencv边缘检测

边缘检测实际上就是对图像进行系统的梯度计算&#xff0c;包含了图像的噪声处理&#xff0c;非极大值抑制&#xff0c;双阈值检测等一系列图像处理方式&#xff0c;通过这些方式处理图像后得到图像的轮廓。这些方式在之前的博客都已经提到过i了&#xff0c;而Opencv提供了一个非…

OpenCV 边缘检测

一. 实验内容 用OpenCV对图片进行边缘检测。 二. 实验代码 //边缘检测 class Task17 { public:void deal() {Mat src_img imread("img\\1.jpg");imshow("边缘检测[原图]", src_img);Mat gray_img;cvtColor(src_img, gray_img, COLOR_BGR2GRAY);Mat out…

java-opencv边缘检测

安装opencv 导入jar包需要dll jar包在opencv\build\java目录里&#xff0c;dll文件在opencv\build\java\64x目录里 边缘检测 package opencv;import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc…

python opencv边缘检测

通过Opencv进行边缘检测可以说是十分常见了&#xff0c;接下来让我们聊一聊如何通过python opencv一步一步实现边缘检测 重要函数讲解 图片读取函数: pic cv2.imread(file_path, flagNone) 参数&#xff1a; file_path:读取的图片的路径。这里要注意如果图像不能读取(由于…

python-opencv边缘检测

9.python-opencv边缘检测 第一章 python-opencv-图片导入和显示 第二章 python-opencv图像简单处理 第三章 python-opencv图像mask掩膜处理 第四章 python-opencv图像马赛克 第五章 python-opencv人脸马赛克 第六章 python-opencv人脸检测 第七章 python-opencv图像张贴 第八章…

opencv边缘检测

边缘检测的一般步骤 滤波 边缘检测的算法对噪声很敏感&#xff0c;所以采用滤波器来改善边缘检测器的性能。 增强 增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来。在具体编程实现时&#xff0c;可通过计算梯度…

14---OpenCV:图像检测之边缘检测

一、图像边缘 边缘(edge)是指图像局部强度变化最显著的部分。主要存在于目标与目标、目标与背景、区域与区域(包括不同色彩)之间&#xff0c;是图像分割、纹理特征和形状特征等图像分析的重要基础。图像强度的显著变化可分为&#xff1a; 阶跃变化函数&#xff0c;即图像强度在…

OpenCV学习11_边缘检测

本部分,我们将一起学习OpenCV中边缘检测的各种算子和滤波器-Canny算子、Sobel算子、Laplacian算子以及Scharr滤波器。 一、边缘检测步骤 在具体介绍之前,先来一起看看边缘检测的一般步骤。 1.【第一步】滤波 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪…

opencv--边缘检测

opencv--边缘检测 1 边缘检测原理2 Sobel检测算子2.1 Sobel检测方法2.2 应用 3 Laplacian算子4. Canny边缘检测4.1 原理4.2应用 5 算子比较 1 边缘检测原理 边缘检测是图像处理和计算机视觉中的基本问题&#xff0c;边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性…

【OpenCV--边缘检测】

目录 一、边缘检测概念 二、Sobel算子 1.描述&#xff1a; 2.方法&#xff1a; 3.Sobel算子的应用&#xff1a; 三、Laplacian算子 1.描述&#xff1a; 2.应用&#xff1a; 四、Canny边缘检测 1.原理&#xff1a; 2.应用&#xff1a; 一、边缘检测概念 1.边缘检测是图像处理和…

利用OpenCV进行边缘检测

简 介&#xff1a; 本文讨论了图像处理中重要的技术&#xff1a;边缘检测&#xff0c;重点介绍了两种方法&#xff08;Sobel边缘检测和Canny边缘检测&#xff09;。在展示OpenCV中的用法 同时也强调了为什么图像平滑是重要的预处理步骤。在Canny边缘检测中 也是使用的Sobel算子…

微信小程序实现轮播图根据图片大小自适应高度

上效果图 话不多说——————上代码 首先wxml <swiper class"con_img" style"height:{{swiperheight}}px" indicator-dots"true" autoplay"true" indicator-active-color"#f8e112" bindchange"changeheight&quo…

微信小程序-图片自适应

image组件 使用使用mode&#xff1a;widthFix&#xff0c;宽度固定&#xff0c;高度自适应 <image class"nav_img" mode"widthFix" src"{{img}}"></image> 注意&#xff0c;在初次进入页面时会有高度拉伸情况&#xff0c;使用样式…

小程序中图片宽度实现100%,高度自适应

在做轮播图时放了几个图片&#xff0c;但是显示一直怪怪的&#xff0c;宽度没有占满&#xff0c;右边总是留一大块空白&#xff0c;怪难看的&#xff0c;开始试了所有的mode属性都不行&#xff0c;至于mode属性起什么作用可以查一下小程序组件的API说明&#xff0c;主要用于控制…

微信小程序之swiper组件高度自适应

要求&#xff1a; &#xff08;顶部广告栏 &#xff09; 改变swiper组件的固定高度&#xff0c;使之随内部每张图片的高度做自适应 原理&#xff1a; 图片加载完之后&#xff0c;获取图片的原始宽高&#xff0c;根据宽高比&#xff0c;计算出适应后的宽高&#xff0c;如果是适…