본문으로 건너뛰기

cv - 이미지에서 윤곽 찾기 (:cv_find_shapes)

선언

찾은 도형 정보, 시각화 이미지 = 이미지:cv_find_shapes(도형 모음[, 도형 찾기 설정])

매개변수

  • 도형 모음
    테이블형이며, 검색할 하나 이상의 도형에 대한 꼭짓점 정보입니다.

    도형 모음 구조
    {
    { -- 도형 1
    { -- 도형 1 꼭짓점 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- 도형 1 꼭짓점 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    { -- 도형 2
    { -- 도형 2 꼭짓점 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- 도형 2 꼭짓점 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    ...
    }
  • 도형 찾기 설정
    테이블형 선택적 매개변수이며, 윤곽 매칭 설정입니다.

    도형 찾기 설정 필드
    {
    should_visualize = false | true, -- 선택적 매개변수, 시각화 결과 출력 여부, 기본값 false
    closed = false | true, -- 선택적 매개변수, 도형을 닫을지 여부, 기본값 false
    min_area = number_value, -- 선택적 매개변수, 최소 면적, 기본값 -1은 제한 없음
    max_area = number_value, -- 선택적 매개변수, 최대 면적, 기본값 -1은 제한 없음
    blur_size = integer_value, -- 선택적 매개변수, 블러 커널의 픽셀 크기, 양의 홀수만 가능, 기본값 3
    canny_threshold1 = 100, -- 선택적 매개변수, 에지 최소 임계값, 기본값 100
    canny_threshold2 = 200, -- 선택적 매개변수, 에지 최대 임계값, 기본값 200
    diff_threshold = number_value, -- 선택적 매개변수, 차이값 임계값, 작을수록 더 유사함, 기본값 0.001
    approx_epsilon = integer_value, -- 선택적 매개변수, 윤곽 근사 시 둘레에 적용할 백분율로 복잡한 윤곽을 단순화하는 데 사용, 기본값 2
    }

반환값

  • 찾은 도형 정보
    테이블형입니다.

    찾은 도형 정보 구조
    {
    { -- 도형 1과 매칭되는 도형 목록
    { -- 도형 1과 매칭되는 1번째 도형
    diff_score = number_value, -- 이 도형과 도형 1 간의 차이값이며 작을수록 더 유사함
    { -- 도형 1과 매칭되는 1번째 도형의 꼭짓점 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- 도형 1과 매칭되는 1번째 도형의 꼭짓점 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    { -- 도형 1과 매칭되는 2번째 도형
    diff_score = number_value, -- 이 도형과 도형 1 간의 차이값이며 작을수록 더 유사함
    { -- 도형 1과 매칭되는 2번째 도형의 꼭짓점 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- 도형 1과 매칭되는 2번째 도형의 꼭짓점 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    ...
    },
    { -- 도형 2와 매칭되는 도형 목록
    { -- 도형 2와 매칭되는 1번째 도형
    diff_score = number_value, -- 이 도형과 도형 2 간의 차이값이며 작을수록 더 유사함
    { -- 도형 2와 매칭되는 1번째 도형의 꼭짓점 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- 도형 2와 매칭되는 1번째 도형의 꼭짓점 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    { -- 도형 2와 매칭되는 2번째 도형
    diff_score = number_value, -- 이 도형과 도형 2 간의 차이값이며 작을수록 더 유사함
    { -- 도형 2와 매칭되는 2번째 도형의 꼭짓점 1
    ["y"] = number_value,
    ["x"] = number_value,
    },
    { -- 도형 2와 매칭되는 2번째 도형의 꼭짓점 2
    ["y"] = number_value,
    ["x"] = number_value,
    },
    ...
    },
    ...
    },
    ...
    }
  • 시각화 이미지
    이미지 객체입니다. options.should_visualize가 true이면 이 반환값은 이미지 객체인 시각화 결과입니다.

설명

이미지에서 하나 이상의 도형을 찾습니다.
표준적이고 규칙적인 도형은 함수를 사용해 생성할 수 있습니다.

예제

function make_triangle(side_len) -- 정삼각형 생성. 변 길이 매개변수만 있으면 꼭짓점 3개를 자동 생성
local hf = math.sqrt(3)/2
local h = math.floor(hf * side_len)
return {
{
["x"] = 1,
["y"] = h,
},
{
["x"] = side_len,
["y"] = h,
},
{
["x"] = side_len // 2,
["y"] = 1,
},
}
end

function make_rectangle(side_len) -- 정사각형 생성. 변 길이 매개변수만 있으면 꼭짓점 4개를 자동 생성
return {
{ -- 왼쪽 위
["x"] = 1,
["y"] = 1,
},
{ -- 왼쪽 아래
["x"] = 1,
["y"] = side_len,
},
{ -- 오른쪽 아래
["x"] = side_len,
["y"] = side_len,
},
{ -- 오른쪽 위
["x"] = side_len,
["y"] = 1,
},
}
end
-- 반환값은 여러 도형 목록으로 구성된 목록이며, 각 목록은 매개변수로 전달한 도형별 검색 결과에 해당함
-- 여기서는 정삼각형과 정사각형을 검색함
local info, visimg = screen.image():cv_find_shapes({make_triangle(45), make_rectangle(40)}, {
min_area = 2000, -- 최소 면적
max_area = 20000, -- 최대 면적
diff_threshold = 0.005, -- 최대 변형 허용치, 작을수록 더 유사함
approx_epsilon = 1,
shape_match_mode = 3,
closed = true, -- 닫힌 도형
should_visualize = true, -- 시각화 결과 출력 여부. true이면 두 번째 반환값은 이미지임
})

nLog(info[1]) -- 정삼각형과 매칭되는 도형 목록 출력
nLog(info[2]) -- 정사각형과 매칭되는 도형 목록 출력

dialog():add_image(visimg):show() -- 시각화 이미지 출력