void Sobel (InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize = 3,
double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT);
Mat dx, dy;
Sobel(src, dx, CV_32FC1, 1, 0);
Sobel(src, dy, CV_32FC1, 0, 1);
src: 입력 영상
dst: 출력 영상. src와 같은 크기, 같은 채널 수.
ddepth: 출력 영상 깊이
dx, dy: x 방향과 y 방향으로의 미분 차수
ksize: 커널 크기
scale: (Optional) 연산 결과에 추가적으로 곱할 값
delta: (Optional) 연산 결과에 추가적으로 더할 값
borderType: 가장자리 픽셀 확장 방식
void magnitude(InputArray x, InputArray y, OutputArray magnitude);
Mat mag;
magnitude(dx, dy, mag);
mag.convertTo(mag, CV_8UC1);
X: 2D 벡터의 x 좌표 행렬. 실수형.
y: 2D 벡터의 y 좌표 행렬. x와 같은 크기. 실수형.
magnitude: 2D 벡터의 크기 행렬. x와 같은 크기, 같은 타입.
void phase(InputArray x, InputArray y, OutputArray angle, bool angleInDegrees = false);
Mat phs;
phase(dx, dy, phs);
X: 2D 벡터의 x 좌표 행렬. 실수형.
y: 2D 벡터의 y 좌표 행렬. x와 같은 크기. 실수형.
angle: 2D 벡터의 크기 행렬. x와 같은 크기, 같은 타입.
anglelnDegrees: true이면 각도 단위, false이면 래디언 단위.
void Canny (InputArray image, OutputArray edges, double threshold1, double threshold2,
int apertureSize = 3, bool L2gradient = false);
Mat src = imread ("circuit.bmp", IMREAD_GRAYSCALE);
Mat dst;
Canny (src, dst, 50, 150);
image: 입력 영상.
edges: 에지 영상.
threshold1: 하단 임계값
threshold2: 상단 임계값. threshold 1과 threshold2의 비율은 1:2 또는 1:3을 권장.
apertureSize: 소벨 연산을 위한 커널 크기
L2gradient: L2 norm 사용 여부.
void HoughLines (InputArray image, OutputArray lines, double rho, double theta,
int threshold, double srn = 0, double stn = 0,
double min_theta = 0, double max_theta = CV_PI);
Canny (src, src_edge, 50, 200);
vector<Vec2f> lines1;
HoughLines(src_edge, lines1, 1, CV_PI / 180, 250);
image: 그레이스케일 에지 영상
lines: 직선의 파라미터(rho, theta) 저장할 출력 벡터. vector\.
rho:축적 배열에서 rho 값의 간격. (e.g.) 1.0 → 1픽셀 간격.
theta: 축적 배열에서 theta 값의 간격. (e.g.) CV_PI / 180 → 1° 간격.
threshold: 축적 배열에서 직선으로 판단할 임계값
stn, srn: 멀티스케일 허프 변환에서 rho 해상도를 나누는 값.
srn: 멀티스케일 허프 변환에서 theta 해상도를 나누는 값
min_theta: 검출할 직선의 최소 theta 값
max_theta: 검출할 직선의 최대 theta 값
void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta,
int threshold, double minLineLength = 0, double maxLineGap = 0);
vector<Vec4i> lines2;
HoughLinesP(src_edge, lines2, 1, CV_PI / 180, 100, 50, 5);
image: 그레이스케일 에지 영상
lines: 선분의 시작, 끝 좌표(x1, y1, x2, y2) 저장할 출력 벡터. vector.
rho: 축적 배열에서 rho 값의 해상도.픽셀 단위. (e.g.) 1.0 → 1픽셀 간격.
theta: 축적 배열에서 theta 값의 간격. 라디안 단위. (e.g.) CV_PI / 180 → 1° 간격.
threshold: 축적 배열에서 직선으로 판단할 임계값
minLineLength: 검출할 선분의 최소 길이
maxLineGap: 직선으로 간주할 최대 에지 점 간격