본문 바로가기
Opencv

Opencv 이미지 전처리1(Sobel, Canny, Erode, Dilate)

by 연원랑 2022. 6. 15.

Sobel

- Sobel 함수는 설정된 Kennel 크기로 이미지의 X축 미분과 Y축 미분을 이용하여 이미지의 경계선을 구할 때 사용 합니다.

void TestSobel()
{
	Mat MatImage;
	Mat sobel_x, sobel_y, sobel_xy;	
	int nKernelsize = 3;

	MatImage = cv::imread("baseball01.bmp");//이미지 로드		

	Sobel(MatImage, sobel_x, -1, 1, 0, nKernelsize);//X방향
	Sobel(MatImage, sobel_y, -1, 0, 1, nKernelsize);//Y방향
	sobel_xy = sobel_x + sobel_y;//XY방향(X방향과 Y방향 합치기)

	cv::imshow("MatImage", MatImage);
	cv::imshow("sobel_x", sobel_x);
	cv::imshow("sobel_y", sobel_y);
	cv::imshow("sobel_xy", sobel_xy);
	waitKey(0);
}

Canny

- Canny 함수는 이미지 Pixel 간의 차이를 비교 하여 경계선을 찾습니다.

Lowthreshold 보다 낮은 경계값은 낮은 경계값으로 인식, Highthreshold 보다 높은 경계값은 높은 경계값으로 인식 하며 Lowthreshold와 Hightreshold 사이의 경계값이 높은 경계값들과 연결되어 있으면 경계선으로 표시합니다.

void TestCanny()
{
	Mat MatImage;
	Mat edgeImage1;	
	Mat edgeImage2;

	MatImage = cv::imread("audrey.bmp");//이미지 로드		

	Canny(MatImage, edgeImage1, 0, 200);//Canny Image 변환
	Canny(MatImage, edgeImage2, 80, 200);//Canny Image 변환

	cv::imshow("MatImage", MatImage);
	cv::imshow("edgeImage1", edgeImage1);	
	cv::imshow("edgeImage2", edgeImage2);
	waitKey(0);
}

Erode

- Erode 는 설정된 Kennel로 이미지 각 Pixel을 침식 시키는 방식 입니다.

이때 설정되는 Kennel은 Circle, Rectangle, Line등으로 변경도 가능합니다.

void TestErode()
{
	Mat MatImage;
	Mat erodeImage1;
	Mat erodeImage2;

	MatImage = cv::imread("audrey.bmp");//이미지 로드		

	cv::erode(MatImage, erodeImage1, Mat::ones(Size(3, 3), CV_8UC1));//Erode(침식)	
	cv::erode(MatImage, erodeImage2, Mat::ones(Size(5, 5), CV_8UC1));//Erode(침식)	

	cv::imshow("MatImage", MatImage);
	cv::imshow("erodeImage1", erodeImage1);
	cv::imshow("erodeImage2", erodeImage2);
	
	waitKey(0);
}

Dilate

- Dilate 는 설정된 Kennel로 이미지 각 Pixel을 팽창 시키는 방식 입니다.

이때 설정되는 Kennel은 Circle, Rectangle, Line등으로 변경도 가능합니다.

void TestDilate()
{
	Mat MatImage;
	Mat dilateImage1;
	Mat dilateImage2;

	MatImage = cv::imread("audrey.bmp");//이미지 로드		

	cv::dilate(MatImage, dilateImage1, Mat::ones(Size(3, 3), CV_8UC1));//Dilate(팽창)	
	cv::dilate(MatImage, dilateImage2, Mat::ones(Size(5, 5), CV_8UC1));//Dilate(팽창)	

	cv::imshow("MatImage", MatImage);
	cv::imshow("dilateImage1", dilateImage1);
	cv::imshow("dilateImage2", dilateImage2);

	waitKey(0);
}

 

댓글