- Canny 알고리즘 5 단계 : Canny 알고리즘은 가장자리 감지 알고리즘이며 좋은 가장자리 감지기입니다.
- GaussianBlur 노이즈 제거
- 그레이 스케일 변환 cvtColor
- 픽셀 그래디언트 Sobel / Scharr 계산
- 비 최대 억제 (x \ y 방향에서 최대가 아닌 값 제거)
- 상한 및 하한 임계 값 출력 이진 이미지
- T1, T2는 임계 값, T2 : T1 = 3 : 1 또는 2 : 1, T2는 높은 임계 값, T1은 낮은 임계 값
- > T2 픽셀, 예약 됨
- 픽셀> T1과 픽셀> T2가 서로 연결되면 픽셀은 유지됩니다.
- Canny 알고리즘 API
- Canny (src, 가장자리, threshold1, threshold2, 크기, L2gradient);
- 매개 변수 : 원본 이미지, 가장자리 만있는 이미지, 낮은 임계 값, 높은 임계 값, Sobel 연산자 크기 (그래디언트 계산을위한 연산자), L2gradient가 true 인 경우 L2를 사용하여 정규화하고, false를 사용하여 L1을 정규화합니다.
- 참고 : Canny ()는 이진 이미지를 가져옵니다.
#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <string>
using namespace std;
using namespace cv;
int t1 = 50;
int t2 = t1 * 2;
int max_value = 255;
void cannyCallback(int, void*);
Mat src, gray, bin, dst, canny;
int main(int argc, char ** argv)
{
src = imread("C:\\Users\\xujin\\Desktop\\test1.JPG");
if (!src.data)
{
cout << "no image";
return -1;
}
namedWindow("src_image", WINDOW_AUTOSIZE);
namedWindow("dst_image", WINDOW_AUTOSIZE);
namedWindow("dstGray_image", WINDOW_AUTOSIZE);
namedWindow("canny_image", WINDOW_AUTOSIZE);
imshow("src_image", src);
cvtColor(src, gray, COLOR_BGR2GRAY);
imshow("dstGray_image", gray);
createTrackbar("cannyT1T2", "canny_image", &t1, max_value, cannyCallback);
cannyCallback(0, 0);
waitKey(0);
return 0;
}
void cannyCallback(int, void*)
{
blur(gray, bin, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);
Canny(bin, canny, t1,t2, 3, false);
imshow("canny_image", canny);
}