2015-02-13 5 views
1

Я полный новичок, когда дело доходит до OpenCV, так что это, наверное, немой вопрос. .OpenCV: Рисование линий от Canny

Я просто пытаюсь получить что-то основное и running- я хочу обратить края, обнаруженные с помощью алгоритма Канни непосредственно на изображение приходит в настоящее время у меня это:

Canny Screenshot

I 'm отображает данные о границах из Canny напрямую, но теперь я хочу избавиться от черного и просто показать белый цвет на обрабатываемом изображении.

Я пробовал такие вещи, как «использование бинарного изображения как альфа-маски», но после дня чтения учебников и попыток всего, что я могу найти, я все еще не уверен, что знаю, что происходит. 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; 
} 

Edit: Я также отвечал на этот вопрос на форумах OpenCV here.

ответ

1

Я не использовал Java более десяти лет и вообще не использовал Java с OpenCV, но я попытаюсь выложить, как я это сделаю. Я делаю все возможное, чтобы написать его на этом языке, но если я не совсем понял это, я надеюсь, что вы сможете внести эти незначительные изменения, чтобы заставить его работать.

Как я понимаю ваш порядок действий после выполнения Канне должно быть таким образом:

  1. Скопируйте edgesMat и конвертировать что BGRA. (Назовем его colorEdges)
  2. Замените белый в colorEdges с цветом вашего выбора (цвет, который вы хотите, нарисованной на видео канал) с использованием edgesMat в качестве маски.
  3. Тогда падение colorEdges назад на rgbaInnerWindow использованием edgesMat в качестве маски.

Код:

//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 

Это Oughta сделать это. :)

copyTo (Mat m)
cvtColor (Mat src, Mat dst, int code)
setTo (Mat value, Mat mask)
copyTo (Mat m, Mat mask)

+0

спасибо. Это сработало отлично! –

Смежные вопросы