这段代码似乎为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版。
答案 0 :(得分:0)
我已经解决了这个问题。
OpenCV库可以在Android智能手机上以两种方式使用:它可以直接嵌入到应用程序中,也可以作为应用程序安装 - " OpenCV Manager"然后将这些库提供给OpenCV应用程序动态。
我的应用程序使用OpenCV Manager应用程序来获取库。不幸的是,似乎OpenCV Manager for Android存在问题,因为当我直接在我的应用程序中嵌入OpenCV库时,Sobel调用开始正常工作。
所以我建议大家静态地将他们的应用程序链接到OpenCV。