본문 바로가기

opencv18

close contours (convexHull 사용) 과제findContours 에 RETR_EXTERNAL 옵션을 주면 가장 외곽의 연결된 선의 좌표들을 추출하는데, 만약 그 외곽선의 일부가 약한 픽셀로 되어 있다면 결과는 봉쇄되지 않은 contour로 인해 안쪽의 contour 좌표들도 결과로 추출되게 된다.결과적으로 가장 외곽의 contour만 추출하고자 한다.  아이디어모든 contour의 포인터들을 하나의 벡터에 집어넣고 그 벡터를 convexHull 로 처리하면 외곽에 완만한 곡선의 결과 포인트들만 얻을 수 있다.처리속도를 고려한다면 모든 포인트들을 전부 벡터에 넣을 필요는 없고 간격을 두고 처리하는 것도 좋은 아이디어이다.※ convexHull 과 approxPolyDP 의 차이점은 approxPolyDP 가 모든 contour 포인트들 대상으.. 2025. 2. 16.
스캔 이미지 중 여러 영수증 분리하기 과제아래와 같이 영수증을 모아 스캔한 이미지가 있고 영수증 영역을 각각 분리하고자 한다. 아이디어1. 위에 4장은 세로로 길고 아래 한장은 옆으로 눕혀있다.2. 위의 4장은 세로이므로 흑백 이미지로 변환한 후 세로로 길게 (3 x 40) 모펄러지 필터를 적용하자3. 2의 필터로 문자들간에 거리가 40픽셀 이하는 하나로 묶여지게 되었고 큰 덩어리로 서로 분리 되었다.    큰 틀안에 독립된 덩어리들도 존재하지만 5번에서 처리.4. findContours 실시하여 먼저 덩어리의 면적 순으로 내림정렬를 시킨다. 5. 작은 덩어리들은 큰 덩어리 내 혹은 겹치지 않는지 조사하여 합체 시키고, 외에 존재하는 덩어리들은 한 묶음으로 하기 위해 시작점과 끝점을 벡터에 등록한다.6. 큰 덩어리는 빨간색으로 작은 덩어리들.. 2025. 2. 15.
자동차 번호판 추출하기 아이디어1. 흑백으로 변환하여 contour 를 실시2. approxPolyDP로 contour 결과로 부터 꼭지점이 4개(4개의 코너)인 것 중 가장 면적이 넓은 contour를 기억approxPolyDP 알고리즘은 정확한 형태를 추출하는게 아니라 contours를 간단화 하는 것이다.contour의 형태에 적게 공헌하는 포인트들은 제거되고 형태에 공헌을 많이 하는 코너들은 남게 되는 것이다.옵션의 epsilon 은 작을수록 제거되는 포인트들은 줄게되고 큰값 일수록 많은 포인트들이 제거되어 간단화가 크게 이루워 진다.3. boundingRect 로 사각형의 좌표와 사이즈를 추출 주의) 노이즈가 심한 경우 contour결과에 영향을 줄 수 있으니 필터링에 신경을 더 써야 할 경우가 있다.번호판 보다 더 .. 2025. 2. 15.
Color를 Grayscale 로 변환 (커스텀 비율) 칼라 이미지를 그레이스케일로 변환시에 OpenCV는 아래 함수를 사용한다.cv::cvtColor(color, gray, cv::COLOR_BGR2GRAY); 위의 함수는 표준 변환 비율( 0.299 ∙ Red + 0.587 ∙ Green + 0.114 ∙ Blue) 을 사용한다. 이는 인간의 눈에는 Green이 민감하게 반응하기 때문에 제일 반영 비율이 높다. 하지만 필요에 따라서는 똑같은 비율을 사용하고자 할 때가 있을 것이며 아래의 함수를 사용하면 간단히 적용 가능하다.단, 위의 함수에 비해 속도는 상당히 느려진다.cv::transform(color, gray, cv::Matx13f(0.333, 0.333, 0.333));처리 시간 테스트사용 이미지: 17500 x 12812  Pixels (224... 2025. 2. 14.