Java OpenCV:从Canny绘制线条
对于OpenCV,我是一个完全的新手,所以这可能是一个愚蠢的问题 我只是想让一些基本的东西启动并运行——我想直接在输入的图像上画出Canny算法检测到的边缘。我目前有: 我直接显示Canny的边缘数据,但现在我想去掉黑色,只在正在处理的图像上显示白色 我曾尝试过谷歌搜索“使用二进制图像作为alpha掩码”,但在阅读了一天的教程并尝试了所有我能找到的东西之后,我仍然不确定我知道发生了什么。OpenCV看起来非常强大,所以这可能是一件非常容易的事情,所以我希望有人能给我指出正确的方向 以下是我正在使用的代码,其中大部分都是从示例中复制的:Java OpenCV:从Canny绘制线条,java,android,opencv,Java,Android,Opencv,对于OpenCV,我是一个完全的新手,所以这可能是一个愚蠢的问题 我只是想让一些基本的东西启动并运行——我想直接在输入的图像上画出Canny算法检测到的边缘。我目前有: 我直接显示Canny的边缘数据,但现在我想去掉黑色,只在正在处理的图像上显示白色 我曾尝试过谷歌搜索“使用二进制图像作为alpha掩码”,但在阅读了一天的教程并尝试了所有我能找到的东西之后,我仍然不确定我知道发生了什么。OpenCV看起来非常强大,所以这可能是一件非常容易的事情,所以我希望有人能给我指出正确的方向 以下是我正在
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
Mat rgba = inputFrame.rgba();
org.opencv.core.Size sizeRgba = rgba.size();
Mat rgbaInnerWindow;
int rows = (int) sizeRgba.height;
int cols = (int) sizeRgba.width;
int left = cols / 8;
int top = rows / 8;
int width = cols * 3 / 4;
int height = rows * 3 / 4;
//get sub-image
rgbaInnerWindow = rgba.submat(top, top + height, left, left + width);
//create edgesMat from sub-image
Imgproc.Canny(rgbaInnerWindow, edgesMat, 100, 100);
//copy the edgesMat back into the sub-image
Imgproc.cvtColor(edgesMat, rgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4);
rgbaInnerWindow.release();
return rgba;
}
编辑:我也在OpenCV论坛上发布了这个问题。我已经十多年没有使用Java了,也没有将Java与OpenCV一起使用过,但我将尝试展示我将如何做到这一点。我正在尽我最大的努力用这种语言写它,但是如果我没有把它写对,我希望你能够做一些小的修改来让它工作 在我看来,您在运行Canny之后的操作顺序应该是:
//step 1
Mat colorEdges;
edgesMat.copyTo(colorEdges);
Imgproc.cvtColor(colorEdges, colorEdges, COLOR_GRAY2BGRA);
//step 2
newColor = new Scalar(0,255,0); //this will be green
colorEdges.setTo(newColor, edgesMat);
//step 3
colorEdges.copyTo(rgbaInnerWindow, edgesMat); //this replaces your current cvtColor line, placing your Canny edge lines on the original image
应该这样做