Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenCV:从Canny绘制线条_Java_Android_Opencv - Fatal编程技术网

Java OpenCV:从Canny绘制线条

Java OpenCV:从Canny绘制线条,java,android,opencv,Java,Android,Opencv,对于OpenCV,我是一个完全的新手,所以这可能是一个愚蠢的问题 我只是想让一些基本的东西启动并运行——我想直接在输入的图像上画出Canny算法检测到的边缘。我目前有: 我直接显示Canny的边缘数据,但现在我想去掉黑色,只在正在处理的图像上显示白色 我曾尝试过谷歌搜索“使用二进制图像作为alpha掩码”,但在阅读了一天的教程并尝试了所有我能找到的东西之后,我仍然不确定我知道发生了什么。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之后的操作顺序应该是:

  • 复制您的edgesMat并将其转换为BGRA。(称之为“颜色边缘”)
  • 使用edgesMat作为遮罩,将colorEdge中的白色替换为您选择的颜色(您希望在视频提要上绘制的颜色)
  • 然后使用edgesMat作为遮罩,将colorEdge放回RGBainerWindow
  • 守则:

    //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
    
    应该这样做