opencv12 contour / labelling contour 는 모양의 외곽에 위치한 포인트들을 연결하는 커브를 의미한다. OpenCV 에서의 contour 는 크게 두가지 함수가 있다.findContours() : 외곽선상의 포인트 좌표 수집drawContours() : 수집된 좌표를 연결한 선긋기수집된 포인트 좌표로 구할 수 있는 것:무게중심moments()외곽선 안쪽의 면적contourArea()외곽선의 길이arcLength()간략한 외곽선approxPolyDP()울퉁불퉁 정도convexHull()울퉁불퉁 여부isContourConvex()외곽선을 내부에 포함한 사각형boundingRect()회전을 고려한 외곽선을 내부에 포함한 사각형사각형의 4코너 포인트minAreaRect()boxPoints()외곽선을 내부에 포함한 원minEnc.. 2023. 12. 7. 공백 메우기 왼쪽과 같은 b/w 이미지를 오른쪽과 같이 공백을 메우는 방법을 OpenCV로 알아보자.아울러 아래의 기법도 확실히 알아두기로 하자.findNonZero 함수를 이용한 흰픽셀의 좌표얻기convexHull 함수를 이용한 어바우트한 윤곽 포인트 획득 이미지를 그레이스케일 변환하여 읽어 들이고 10 을 기준으로 b/w 변환한다. cv::Mat inputImage = cv::imread("input.jpg", CV_LOAD_IMAGE_GRAYSCALE); cv::threshold(inputImage, inputImage, 10, 255, 0); b/w 이미지내에서 흰색픽셀의 좌표를 찾아내서 Mat 안에 보관cv::Mat nonZeroCoordinates; cv::findNonZero(inputImage, non.. 2023. 12. 2. b/w 이미지의 칼럼(수직방향)별 검정(=0)픽셀수 카운트 이미지에 있어서 검은 테두리 부분을 제거 하는 등을 위해서는 각 로우별, 칼럼별로 검은 픽셀수를 카운트하여 어느 threshold 치 이상인 경우에는 처리하는 로직등의 경우에 아래 코드가 유용하게 사용할 수 있을 것 같다. 아래코드는 수직방향인 칼럼의 검정픽셀수를 계산한다. 각 로별의 검정픽셀수도 응용할 수 있으리라 본다. // GRAY인 경우에는 읽어들어 cv::threshold 로 이진화 할 필요가 있다. // 이하는 이미지 자체가 흑백만이 존재하는 가정으로 하자. cv::Mat1b img = cv::imread("img.png", CV_LOAD_IMAGE_GRAYSCALE); cv::Mat1i black_pixels(img.cols, 1); for(int x = 0; x < img.cols; x++.. 2023. 12. 2. cv::Mat 이모저모 본론으로 들어가지 전에 C++ 기초가 부족하시는 분들이 있을 것 같아서 왜 앞에 cv:: 를 붙이나요? 라고 하면 opencv 의 라이브러리(dll)를 생성할 때 namespace cv { 코드 } 형식으로 만들었기 때문에 명시적으로 cv:: 를 적어주는 것이다. 만약 자신의 코드화일의 선언부에 using namespce cv; 를 선언해 주면 cv:: 를 생략해 줘도 상관없다. 하지만 라이브러리 간에 똑같은 함수를 사용하는 경우가 있고 코드를 알기 쉽게 하기 위해서 개인적으로는 cv:: 를 붙여서 코딩하는 것을 선호한다. 단순히 선언만 -> 이미지 공간은 할당되지 않고 클래스 변수만 스택에 저장 cv::Mat image; 이미지 공간 할당 넓이, 높이, 픽셀타입, (옵션)초기값 을 지정한 경우 - (1.. 2023. 11. 29. 이전 1 2 3 다음