如果我有一个图像并调用OpenCV Sobel函数
Sobel(Img,gradX,CV_16S,1,0,3);
convertScaleAbs(gradX,absGradX);
imshow("Gradient Image",absGradX);
我得到了一个很好的渐变图像
我想使用filter2D和一个自定义内核来计算我的x梯度。我的sobel内核是
10-1号
20-2年
10-1号
现在当我尝试这个,我得到的只是一个全黑的图像
^{pr2}$
得到的渐变图像是全黑的。你知道我做错了什么吗?
谢谢
Tags:
实际上,我从你创建的一个自定义输出中得到了内核。我使用Python OpenCV来实现这一点,但是在OpenCV中调用函数的方式几乎相同。为了实现自包含,这是我使用Sobel和自定义内核为您的图像调用的Python代码:
< C++ >: ^{pr2}$如果您运行此代码,您将实际看到两个映像,其中第一个映像使用内置的Sobel,而另一个使用您的自定义内核。我在Sobel实现和梯度之间看到的主要区别是,您使用Sobel内核将每个元素除以8。因此,任何你检测到的梯度,你都会得到对比度降低,这就是我看到的。实际上,你基本上是把梯度结果除以8,所以你把输出强度降低了一倍。尝试执行:
<>也在C++中:float xVals2[9] = {1f,0f,-1f,2f,0f,-2f,1f,0f,-1f};
实际的Sobel内核,然后再次运行代码。相比之下,你应该会看到更高的提升。对于Python,这将是:如果你用这个内核运行你的代码,你会看到有一个更高的对比度。您将看到,虽然有更多的噪声,因为梯度值更大。在
相关问题 更多 >
编程相关推荐