OpenCV:使用Sobel算子:dx = 1,dy = 0给出与dx = 0完全相同的输出,dy = 1(bug?)

时间:2017-01-21 12:28:35

标签: java android opencv image-processing

这段代码似乎为dx = 1,dy = 0和dx = 0,dy = 1生成完全相同的Sobel梯度。 这意味着我无法从gradY中减去gradX因为这会留下黑色图像。

这是OpenCV中的错误吗?代码错了吗?

输入图像是从智能手机的相机拍摄的图像。

Mat gradX = new Mat();
Mat gradY = new Mat();
Mat gray = new Mat();
Mat gradient = new Mat()

Imgproc.cvtColor( cameraSnapshotFrame, gray, COLOR_BGR2GRAY );

Imgproc.Sobel( gray, gradX, CV_32F, 1, 0, -1, 1.0, 0 );
Imgproc.Sobel( gray, gradY, CV_32F, 0, 1, -1, 1.0, 0 ); // for some reason this gives the same result as the line above

Core.subtract( gradX, gradY, gradient );
Core.convertScaleAbs( gradient, gradient ); // gradient is an empty black image

我正在使用OpenCV for Android 3.1.0版。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。

OpenCV库可以在Android智能手机上以两种方式使用:它可以直接嵌入到应用程序中,也可以作为应用程序安装 - " OpenCV Manager"然后将这些库提供给OpenCV应用程序动态。

我的应用程序使用OpenCV Manager应用程序来获取库。不幸的是,似乎OpenCV Manager for Android存在问题,因为当我直接在我的应用程序中嵌入OpenCV库时,Sobel调用开始正常工作。

所以我建议大家静态地将他们的应用程序链接到OpenCV。