<원 검출 소스>
int main()
{
//filename의 이미지를 , 컬러로 읽는다
if(srcImage.
empty()){ //해당 이미지 없으면 경고
printf(" Error opening image\n");
return -1;
}
Mat gray; //Gray이미지를 담기위한 Mat 클래스 선언
//HoughCircle 알고리즘에는 Gray,8bit이미지 들어가야한다.
//원 이미지 GrayScale로 변환한다.
int ksize=7;/*커널의 사이즈 결정 - 커널=필터윈도우, 특정 지점의 주변을 어느만큼 크기로 필터링할 지 기본연산 단위 설정*/
mat dstImage1,dstImage2; //2개의 필터를 각각 처리하기위해 2개의 Mat선언
Gaussian
Blur(src, dstImage3, Size(ksize, ksize),0.0);
/*가우시안블러 이미지의 노이즈를 제거하는 역할,영상 흐리게 만들 수 있다.
원 검출시 이미지가 뭉게질 수 있으므로 이미지를 더 분명하게 만들 수
있는 bilateralFilter사용이 좋을 수도 있다. 선택하면 된다.*/
double sigmaColor=10.0;
double sigmaSpace=10.0;
bilateralFilter(srcImage, dstImage2,d,sigmaColor,sigmaSpace);
imshow("dstImage1",dstImage1);
imshow("dstImage2",dstImage2);
vector<Vec3f> circles; //circle정보를 담을 vector클래스 선언
/*처리할image,검출유형circles,method,minDist, dp,param1,param2,minRadius,MaxRadius*/
30, 200, 100, 1, 30); 맨 아래에 parameter설명
//검출한 원을 원본이미지에 표시
for( size_t i = 0; i < circles.size(); i++ )
{
int radius = c[2];
}
imshow(
"detected circles", srcImage);
return 0;
}
- src_gray: Input image (grayscale)
- circles: A vector that stores sets of 3 values: for each detected circle.
- CV_HOUGH_GRADIENT: Define the detection method. Currently this is the only one available in OpenCV
- dp = 1: The inverse ratio of resolution
- min_dist = src_gray.rows/8: Minimum distance between detected centers
- param_1 = 200: Upper threshold for the internal Canny edge detector
- param_2 = 100*: Threshold for center detection.
- min_radius = 0: Minimum radio to be detected. If unknown, put zero as default.
- max_radius = 0: Maximum radius to be detected. If unknown, put zero as default
OpenCV에는 영상을 부드럽게 하고 잡음을 제거하는 필터들이 있다.
boxFilter, bilateralFilter,medianBlur, blur, GaussianBlur 함수로 각각 별도로 제공된다.
이중 bilateralFilter는 가우시안 함수를 하용하며 에지를 덜 약화시키면서 양방향 필터링을 한다. 이미지는 8비트,32비트 1,3채널 가능하고 dst는 src와 같은 크기, 같은 자료형인 풀력영상이다. sigmaColor는 컬러 공간에서 필터 표준편차이다.