Python Opencv 윤곽 상용 조작 코드 인 스 턴 스 분석

1.색 공간 변환
cv2.cvtColor 사용(inputimage,flag),flag 변환 형식
자주 사용 하 는 변환 형식 은 다음 과 같 습 니 다.
  • BGR 과 그 레이스 케 일의 변환 사용 cv2.COLORBGR2GRAY
  • BGR 과 HSV 의 전환 사용 cv2.COLORBGR2HSV
  • img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)2.이치 화
  • ret, dst = cv2.threshold(src, thresh, maxval, type)
  • src:사진 소스(그 레이스 케 일)
  • 을 나타 낸다.
  • thresh:한도 값(시작 값)
  • 을 나타 낸다.
  • maxval:최대 치
  • type:여기 서 구분 할 때 어떤 종류의 알고리즘 을 사용 하 는 지 나타 내 는 알고리즘 입 니 다.상용 값 은 0(cv2.THRESHBINARY)
  • 반환 값
    ret:지정 한 thresh
    dst:대상 이미지
    ret, dst = cv2.threshold(img_gray, 200, 255, cv2.THRESH_BINARY)3.윤곽 찾기 및 그리 기
    3.1 cv2.findContours(image, mode, method[, offset])
    개요:
    2 값 그림 의 윤곽 을 찾 습 니 다.검은색 은 배경 을 나타 내 고 흰색 은 물 체 를 나타 낸다.즉,검은색 배경 에서 흰색 물체 의 윤곽 을 찾 는 것 이다.
    인자:
  • image:8 비트 단일 채널 이미지.비 0 픽 셀 값 은 1 로 보기 때문에 그림 은 2 값 그림
  • 으로 간주 합 니 다.
  • mode:윤곽 검색 방식
  • cv2.RETR_EXTERNAL:외부 윤곽 만 검색
  • cv2.RETR_LIST:모든 윤곽 을 검사 하고 계층 구 조 를 구축 하지 않 습 니 다
  • cv2.RETR_CCOMP:모든 윤곽 을 검사 하고 2 단계 구 조 를 구축 합 니 다.위의 한 층 은 외부 경계 이 고 안의 한 층 은 내부 구멍 의 경계 정보 이다.만약 내 공 안에 또 하나의 연결 물체 가 있다 면,이 물체 의 경계 도 꼭대기 층 에 있다.
  • cv2.RETR_TREE:모든 윤곽 을 검사 하고 완전한 차원 구 조 를 구축 합 니 다
  • method:윤곽 이 비슷 한 방법
  • cv2.CHAIN_APPROX_NONE:모든 윤곽 점
  • 저장
  • cv2.CHAIN_APPROX_SIMPLE:수평,수직,대각선 을 압축 하고 단점 만 남 깁 니 다.예 를 들 어 사각형 윤곽 은 4 개의 점 으로
  • 을 인 코딩 할 수 있다.
  • cv2.CHAIN_APPROX_TC89_L1,cv2.CHAIN_APPROX_TC89_KCOS:Teh-Chini chain 근사 알고리즘
  • 사용
  • offset:(선택 가능 한 매개 변수)윤곽 점 의 오프셋,형식 은 tuple 입 니 다.예 를 들 어(-10,10)윤곽 점 은 X 마이너스 방향 으로 10 개의 픽 셀 점 을 이동 하고 Y 정방 향 으로 10 개의 픽 셀 점 을 이동 하 는 것 을 나타 냅 니 다.
  • 반환 값:
  • contours:윤곽 점.목록 형식,모든 요 소 는 3 차원 배열(그 모양 은(n,1,2)이 고 그 중에서 n 은 윤곽 점 의 개 수 를 나타 내 며 2 는 픽 셀 점 좌 표를 나타 낸다)은 윤곽
  • 을 나타 낸다.
  • hierarchy:윤곽 간 의 차원 관 계 는 3 차원 배열 이 고 모양 은(1,n,4)이 며 그 중에서 n 은 윤곽 의 총 개 수 를 나타 내 고 4 는 4 개의 수로 각 윤곽 간 의 상호 관 계 를 나타 내 는 것 을 말한다.첫 번 째 수 는 동급 윤곽 의 다음 윤곽 번 호 를 나타 내 고,두 번 째 수 는 동급 윤곽 의 이전 윤곽 의 번 호 를 나타 내 며,세 번 째 수 는 이 윤곽 의 다음 윤곽 의 번 호 를 나타 내 고,네 번 째 수 는 이 윤곽 의 이전 윤곽 의 번 호 를 나타 낸다.
  • 보충:윤곽 점 의 집합 목록 을 얻 으 려 면 사용 할 수 있 습 니 다.cnt = np.squeeze(contours[0])3.2 cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]])
    인자:
  • image:윤곽 을 그 려 야 할 목표 그림 입 니 다.원 도 를 바 꿀 수 있 습 니 다.
  • contours:윤곽 점,상기 함수 cv2.find Contours()의 첫 번 째 반환 값
  • contourIdx:윤곽 의 색인 은 몇 번 째 윤곽 을 그립 니 다.-1 은 모든 윤곽 을 그립 니 다
  • color:윤곽 을 그 리 는 색
  • thickness:(선택 가능 한 매개 변수)윤곽선 의 너비,-1 은
  • 을 채 우 는 것 을 나타 낸다.
  • line Type:(선택 가능 한 매개 변수)윤곽 선형,cv2.LINE 포함4,cv2.LINE_8(기본 값),cv2.LINEAA 는 각각 4 인접 선,8 영역 선,톱니 선(곡선 을 잘 나 타 낼 수 있 음)
  • 을 나타 낸다.
  • hierarchy:(선택 가능 한 매개 변수)등급 구조,상기 함수 cv2.findContours()의 두 번 째 반환 값,max Level 매개 변수 와 결합 하여
  • 을 사용 합 니 다.
  • max Level:(선택 가능 한 매개 변수)는 0 으로 지정 한 윤곽 만 그립 니 다.1 은 지정 한 윤곽 과 다음 단계 의 하위 윤곽 을 그립 니 다.2 는 지정 한 윤곽 과 모든 하위 윤곽 을 그립 니 다
  • 과 같 습 니 다.
  • offset:(선택 가능 한 매개 변수)윤곽 점 의 오프셋
  • import cv2
    img = cv2.imread('D:/2.jpg',1)
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, dst = cv2.threshold(img_gray, 200, 255, cv2.THRESH_BINARY)
    contours,hierarchy = cv2.findContours(dst, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
    cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
    cv2.imshow('img',img)
    cv2.waitKey(0)
    4.점 과 윤곽 위치 관계
    이 기능 은 그림 의 점 과 윤곽 사이 의 최 단 거 리 를 찾 을 수 있 습 니 다.점 이 윤곽 밖 에 있 을 때 마이너스 값 을 되 돌려 주 고 점 이 내부 에 있 을 때 플러스 값 을 되 돌려 주 며 점 이 윤곽 에 있 으 면 0 을 되 돌려 줍 니 다.dist = cv2.pointPolygonTest(cnt, (100, 100), True)검사(100,100)와 윤곽(cnct)의 거리
    함수 에서 두 번 째 매개 변 수 는 tuple 형식 이 필요 합 니 다.세 번 째 매개 변 수 는 measureDist 입 니 다.True 라면 거 리 를 찾 습 니 다.False 라면 이 점 이 내부 인지 외부 인지 윤곽 인지 찾 습 니 다.(각각+1,-1,0 으로 되 돌아 갑 니 다)
    거리 가 필요 하지 않 으 면 세 번 째 매개 변 수 를 False 로 확보 하 십시오.시간 이 걸 리 는 과정 이기 때 문 입 니 다.따라서 이 를 False 로 설정 하면 2-3 배의 가속 을 제공 할 수 있다.
    5.직선 의합 fitline 함수output = cv2.fitLine(InputArray points, distType, param, reps, aeps)인자:
  • InputArray Points:적합 한 직선 집합 은 행렬 형식(예 를 들 어 numpy.array)
  • 이 어야 합 니 다.
  • distType:거리 유형.fitline 은 거리 최소 화 함수 로 직선 을 맞 출 때 입력 점 에서 직선 을 맞 추 는 거리 와 최소 화 를 해 야 합 니 다.이곳 의 거리의 유형 은 다음 과 같은 몇 가지 가 있다.
  • cv2.DIST_USER : User defined distance
  • cv2.DIST_L1: distance = |x1-x2| + |y1-y2|
  • cv2.DIST_L2:유럽식 거리,이때 최소 이승 법 과 같은
  • cv2.DIST_C: distance = max(|x1-x2|,|y1-y2|)
  • cv2.DIST_L12: L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1))
  • cv2.DIST_FAIR
  • cv2.DIST_WELSCH
  • cv2.DIST_HUBER
  • param:거리 매개 변 수 는 선택 한 거리 유형 과 관련 이 있 으 며 값 은 0
  • 으로 설정 할 수 있 습 니 다.
  • reps,aeps:5/6 번 째 매개 변 수 는 의합 직선 에 필요 한 직경 방향 과 각도 정 도 를 나타 내 는 데 사용 되 며,일반적으로 두 값 은 모두 1e-2 로 설정 된다.
  • 반환 값:
    output:2 차원 직선 에 대해 출력 output 는 4 차원 이 고 앞의 2 차원 은 의합 한 직선 방향 을 대표 하 며 뒤의 두 자 리 는 직선 상의 한 점 을 대표 합 니 다.(사선
    loc = np.array(loc)
    output = cv2.fitLine(loc, cv2.DIST_L2, 0, 0.01, 0.01)
    k = output[1] / output[0]
    b=output[3]-k*output[2]\#k[key]오류?
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기