OpenCV——Scharr边缘检测

目录

OpenCV------Scharr边缘检测由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。

一、Scharr算法

1、算法概述

   Scharr边缘检测算法是对Sobel算子差异性的增强,因此两者在检测图像边缘的原理和使用方式上相同。Scharr算子的边缘检测滤波尺寸为3x3,因此也可称其为Scharr滤波器。可以通过将滤波器中的权重系数放大来增大像素见的差异,Scharr算子就是采用这种思想,其在X方向一阶Scharr边缘检测算子为:
− 3 0 3 − 10 0 10 − 3 0 3 (1) \left \\begin{matrix} -3 \& 0 \& 3\\\\ -10 \& 0 \& 10 \\\\ -3 \& 0 \& 3 \\end{matrix} \\right \tag{1} −3−10−30003103 (1)

Y方向一阶Scharr边缘检测算子为:
− 3 10 − 3 0 0 0 3 10 3 (2) \left \\begin{matrix} -3 \& 10 \& -3\\\\ 0 \& 0 \& 0 \\\\ 3 \& 10 \& 3 \\end{matrix} \\right \tag{2} −30310010−303 (2)

2、主要函数

cpp 复制代码
void Scharr( InputArray src, OutputArray dst, int ddepth,
                          int dx, int dy, double scale = 1, double delta = 0,
                          int borderType = BORDER_DEFAULT )
  • src:传入的图像
  • ddepth:图像的深度,可以为-1、CV_16S、CV_32F、CV_64F。
  • dx、dy:指的是求导的阶数,0表示这个方向上没有求导,所填的数一般为0、1、2。
  • scale:计算可选比例因子,默认值1 。
  • delta:加到输出像素的偏值,默认为0 。
  • borderType:边界类型,默认值BORDER_DEFAULT。

二、C++代码

cpp 复制代码
#include <opencv2\opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	//读取图像,黑白图像边缘检测结果较为明显
	Mat img = imread("2.jpg", IMREAD_ANYDEPTH);
	if (img.empty())
	{
		cout << "请确认图像文件名称是否正确" << endl;
		return -1;
	}
	Mat resultX, resultY, resultXY;

	//X方向一阶边缘
	Scharr(img, resultX, CV_16S, 1, 0);
	convertScaleAbs(resultX, resultX);

	//Y方向一阶边缘
	Scharr(img, resultY, CV_16S, 0, 1);
	convertScaleAbs(resultY, resultY);

	//整幅图像的一阶边缘
	resultXY = resultX + resultY;

	//显示图像
	imshow("resultX", resultX);
	imshow("resultY", resultY);
	imshow("resultXY", resultXY);
	waitKey(0);
	return 0;
}

三、python代码

python 复制代码
import cv2

img = cv2.imread("2.jpg")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# -------------------Scharr边缘检测------------------------
x = cv2.Scharr(gray_img, cv2.CV_16S, 1, 0)
y = cv2.Scharr(gray_img, cv2.CV_16S, 0, 1)
# cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])
# 可选参数alpha是伸缩系数,beta是加到结果上的一个值,结果返回uint类型的图像
Scharr_absX = cv2.convertScaleAbs(x)  # convert 转换  scale 缩放
Scharr_absY = cv2.convertScaleAbs(y)
result = cv2.addWeighted(Scharr_absX, 0.5, Scharr_absY, 0.5, 0)
# ----------------------显示结果----------------------------
cv2.imshow('origin_img', img)
cv2.imshow('img', gray_img)
cv2.imshow('Scharr_absX', Scharr_absX)
cv2.imshow('Scharr_absY', Scharr_absY)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、结果展示

1、灰度图

2、X方向一阶边缘

2、Y方向一阶边缘

3、整幅图像的一阶边缘

五、相关链接

1 Scharr(边缘提取)

相关推荐
DP DPharness1 分钟前
拆开 clearai-dsh 的包结构:一个 DSH 预设如何不改引擎加进认识论层
人工智能·dpharness
ThinkerQAQ_2 分钟前
并发编程(七):volatile——从语言规则到 CPU
java·python·go
蜗牛互联网6 分钟前
Python Responses API函数调用实战:工具白名单、参数校验与预算
java·人工智能·后端
DanCheng-studio6 分钟前
毕业设计项目 基于深度学习的图像修复算法 DCGAN
python·毕业设计·毕设
时代的凡人7 分钟前
用 AI 来做大学教材。
人工智能
秦先生在广东8 分钟前
GPT-6 模型家族选型、成本控制及长任务工作流管理深度指南
人工智能
禁默9 分钟前
如何把AI Agent托管在家里电脑:2026年UU远程终端/CLI/端口映射/网络代理开发者实测
网络·人工智能·电脑
开开心心就好10 分钟前
二维码批量生成导出工具,离线可用完全免费
java·前端·人工智能·智能手机·github·excel·visual studio
1024奇点10 分钟前
【仓颉语言入门 · 第24课】
开发语言·ide·开源
IT古董11 分钟前
《FDE前沿部署工程师实战教程》31 - Enterprise AI Reliability:Agent稳定性与生产运维体系
大数据·数据库·人工智能