당신의 첫 번째 실제 프로젝트 – 실시간 에지 검출 및 녹화
Source: Dev.to

왜 이것이 중요한가
에지 검출은 진지한 컴퓨터 비전에서의 “헬로 월드”입니다 – 파라미터를 튜닝하고, 깨끗한 라인을 찾아다니며, 순수 OpenCV 설정이 얼마나 많은 시간을 낭비하는지 깨닫게 되는 곳이죠.
순수 GoCV만 사용한다면 다음과 같은 작업에 수십 줄을 쓰게 됩니다:
- 카메라 캡처 루프
- 윈도우 생성
- Mat 관리(그리고 불가피한 메모리 누수)
- 키보드 처리
- 녹화 로직
GoCVKit은 이 모든 것을 무료로 제공해 줍니다. 여러분은 파이프라인에만 집중하면 됩니다.
실습: 에지 디텍터 만들기
프로젝트 설정
# 아직 하지 않았다면
mkdir gocvkit-edge && cd gocvkit-edge
go mod init edge-demo
go get github.com/Elliot727/gocvkit
main.go
package main
import (
"log"
"github.com/Elliot727/gocvkit"
)
func main() {
app, err := gocvkit.NewApp("config.toml")
if err != nil {
log.Fatal(err)
}
defer app.Close()
app.Run(nil)
}
config.toml
[app]
window_name = "GoCVKit – Live Edge Detection"
record = true # 처리된 비디오를 자동으로 저장
output = "edge_detection.mp4" # 선택 사항: 사용자 지정 파일명
[camera]
device_id = 0
# file = "demo.mp4" # 대신 비디오 파일을 사용하려면 주석 해제
[stream]
enabled = false # 지금은 끈 상태 – 나중에 켤 수 있음
[[pipeline.steps]]
name = "Grayscale"
[[pipeline.steps]]
name = "GaussianBlur"
kernel = 9
sigma = 1.8
[[pipeline.steps]]
name = "Canny"
low = 50
high = 150
앱 실행
go run .
다음과 같은 라이브 에지‑디텍션 창이 나타납니다:
- 깔끔한 Canny 에지
f키를 눌러 FPS 오버레이 토글- 자동으로 녹화 시작 (
edge_detection.mp4) config.toml의 값을 수정 → 저장 → 즉시 업데이트 (Week #2 덕분!)
레벨 업
부드러운 에지를 위해 블러 강화
kernel = 15
sigma = 3
더 부드러운 에지
low = 30
high = 100
잡음을 정리하기 위해 형태학 적용
[[pipeline.steps]]
name = "Dilate"
kernel = 3
iterations = 1
녹화 실시간 토글
config.toml에서 record = false 로 바꾸고 저장하세요.
보너스: 프레임 콜백으로 간단한 오버레이 추가
app.Run(func(frame *gocv.Mat) {
// 최종 처리된 프레임에서 실행
gocv.PutText(frame, "Low: 50 High: 150", image.Pt(10, 30),
gocv.FontHersheyPlain, 1.5, gocv.NewScalar(255, 255, 255, 0), 2)
})
(한 번 재컴파일하면 됩니다 – 이제 문자열을 바꾸거나 나중에 설정 파일로 옮겨도 텍스트를 핫‑리로드할 수 있습니다.)
전문가 팁
- 녹화 파일이 너무 커지면 자동으로 파일을 회전시켜 줍니다 – 수동 관리가 필요 없습니다.
Esc또는q키를 눌러 정상적으로 종료하면 리소스가 정리됩니다.- 웹캠이 없나요?
file = "demo.mp4"주석을 해제해 비디오 파일로 전환하세요.
직접 해보기
위의 config.toml을 복사하고 프로그램을 실행한 뒤 마음껏 실험해 보세요. 깨뜨리고, 실시간으로 고치고, 속도를 체감해 보세요.
가장 좋아하는 에지‑디텍션 튜닝은 무엇인가요? 굵고 선명한 라인 vs. 부드러운 윤곽선? 댓글에 남겨 주세요!