python 3大于2大于1是对的吗_尺寸大于3 x 3的OpenCV Sobel滤波器的内核系数是多少? - python...

我正在使用大小为5x5和7x7的OpenCV的Sobel滤波器来计算图像导数。

有人可以让我知道OpenCV中大小为5x5和7x7的Sobel过滤器的内核值吗?在进行Google搜索时,它向我展示了许多不同的内核。

以下是5 x 5的一些示例:

1.可分离

2 1 0 -1 -2

4 8 0 -4 -8

6 12 0 -12 -6

4 8 0 -4 -8

2 1 0 -1 -2

2。不可分离

2 1 0 -1 -2

4 10 0 -4 -10

7 17 0 -17 -7

4 10 0 -4 -10

2 1 0 -1 -2

3.奇怪不可分

2 1 0 -1 -2

3 2 0 -2 -3

4 3 0 -3 -4

3 2 0 -2 -3

2 1 0 -1 -2

参考方案

如果您确实想了解OpenCV的用途,则可以使用 getDerivKernels 来确定Sobel滤波器的内核系数。您需要做的是指定所需的方向以及所需的蒙版大小。这样,每个内核大小有两个方向,因此我们需要调用四次。

但是,返回的是代表Sobel滤波器的水平x和垂直y 1D内核,您可以使用它们通过 sepFilter2D 执行可分离的2D滤波。如果您确实想查看内核本身,只需将outer product放在从x返回的y和getDerivKernels内核之间即可。

使用Python的OpenCV接口可以快速显示5 x 5 x,y和7 x 7 x和y内核:

In [1]: import numpy as np

In [2]: import cv2

In [3]: sobel5x = cv2.getDerivKernels(1, 0, 5)

In [4]: np.outer(sobel5x[0], sobel5x[1])

Out[4]:

array([[ -1., -4., -6., -4., -1.],

[ -2., -8., -12., -8., -2.],

[ 0., 0., 0., 0., 0.],

[ 2., 8., 12., 8., 2.],

[ 1., 4., 6., 4., 1.]], dtype=float32)

In [5]: sobel5y = cv2.getDerivKernels(0, 1, 5)

In [6]: np.outer(sobel5y[0], sobel5y[1])

Out[6]:

array([[ -1., -2., 0., 2., 1.],

[ -4., -8., 0., 8., 4.],

[ -6., -12., 0., 12., 6.],

[ -4., -8., 0., 8., 4.],

[ -1., -2., 0., 2., 1.]], dtype=float32)

In [7]: sobel7x = cv2.getDerivKernels(1, 0, 7)

In [8]: np.outer(sobel7x[0], sobel7x[1])

Out[8]:

array([[ -1., -6., -15., -20., -15., -6., -1.],

[ -4., -24., -60., -80., -60., -24., -4.],

[ -5., -30., -75., -100., -75., -30., -5.],

[ 0., 0., 0., 0., 0., 0., 0.],

[ 5., 30., 75., 100., 75., 30., 5.],

[ 4., 24., 60., 80., 60., 24., 4.],

[ 1., 6., 15., 20., 15., 6., 1.]], dtype=float32)

In [9]: sobel7y = cv2.getDerivKernels(0, 1, 7)

In [10]: np.outer(sobel7y[0], sobel7y[1])

Out[10]:

array([[ -1., -4., -5., 0., 5., 4., 1.],

[ -6., -24., -30., 0., 30., 24., 6.],

[ -15., -60., -75., 0., 75., 60., 15.],

[ -20., -80., -100., 0., 100., 80., 20.],

[ -15., -60., -75., 0., 75., 60., 15.],

[ -6., -24., -30., 0., 30., 24., 6.],

[ -1., -4., -5., 0., 5., 4., 1.]], dtype=float32)

请注意,内核不是标准化的。如果要使用它们进行过滤,则可能应标准化内核。 getDerivKernels中有一个标志,可让您标准化掩码。

还要注意,给定尺寸的一个蒙版是另一个蒙版的转置,如果要检测特定方向的边缘,这是有意义的。

为了完整起见,这是上述Python代码的C++版本。要编译代码,请将其放入文件中……命名为test.cpp,然后在终端中执行以下操作:

g++ -Wall -g -o test test.cpp `pkg-config --cflags --libs opencv`

编译后,使用./test运行程序。

#include

using namespace std;

using namespace cv;

int main() {

// For the kernels

Mat sobelX, sobelY;

// 5 x 5 - x direction

getDerivKernels(sobelX, sobelY, 1, 0, 5, false, CV_32F);

cout << "sobel5x = " << endl << " " << sobelX*sobelY.t() << endl << endl;

// 5 x 5 - y direction

getDerivKernels(sobelX, sobelY, 0, 1, 5, false, CV_32F);

cout << "sobel5y = " << endl << " " << sobelX*sobelY.t() << endl << endl;

// 7 x 7 - x direction

getDerivKernels(sobelX, sobelY, 1, 0, 7, false, CV_32F);

cout << "sobel7x = " << endl << " " << sobelX*sobelY.t() << endl << endl;

// 7 x 7 - y direction

getDerivKernels(sobelX, sobelY, 0, 1, 7, false, CV_32F);

cout << "sobel7y = " << endl << " " << sobelX*sobelY.t() << endl << endl;

return 0;

}

请注意,x和y内核都是列向量,因此您需要转置y向量,以便它成为计算外部乘积的行向量。

Python Pandas导出数据 - python

我正在使用python pandas处理一些数据。我已使用以下代码将数据导出到excel文件。writer = pd.ExcelWriter('Data.xlsx'); wrong_data.to_excel(writer,"Names which are wrong", index = False); writer.…当我运行python代码时,它说“ <

基本上,这是我们合作者的python代码,用于生成网格,该网格是在Linux环境下开发的。我使用Cygwin在Windows上运行此代码。麻烦部分如下。 BiV_temp.geo也是一个python脚本。因此,命令是用预定义的数字和文件名替换脚本BiV_temp.geo中的字符串。os.system('cp BiV_fiber.geo BiV_te…Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…Python lmfit约束:a

我在Python中使用lmfit来拟合一些数据,其中包括拟合变量a,b和c。我需要确保a

也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值