logo

OpenCV: 임계값을 사용한 분할

이 기사에서는 객체 분할을 위한 기본 기술을 다음과 같이 설명합니다. 임계값 . 그러나 더 자세히 설명하기 전에 아래에서 OpenCV에 대한 간략한 개요를 살펴보겠습니다. 오픈CV (오픈 소스 컴퓨터 비전)은 다음과 같은 다양한 분야에서 실시간 컴퓨터 비전 작업을 수행하는 것을 목표로 하는 프로그래밍 기능의 크로스 플랫폼 오픈 소스 라이브러리입니다.
  • 얼굴 인식
  • 홍채인식시스템
  • 제스처 인식
  • 인간-컴퓨터 상호작용(HCI)
  • 모바일 로봇공학
  • 객체 식별
  • 세분화 및 인식
  • 입체시 스테레오 비전: 카메라 2대를 통한 깊이 인식
  • 증강현실
또한 위 영역을 지원하는 데 사용되는 다양한 분류자가 포함된 강력한 통계 기계 학습 라이브러리도 포함되어 있습니다. OpenCV를 사용하려면 필요한 라이브러리를 가져오거나 포함하고 사용 가능한 수많은 기능을 활용해 보세요. 임계값 객체를 배경에서 분리하는 데 사용되는 매우 널리 사용되는 분할 기술입니다. 아래 기사에서는 임계값을 적용하는 데 사용되는 다양한 기술을 설명했습니다. 회색조 이미지(8비트) . 과정은 임계값 이미지의 각 픽셀 값(픽셀 강도)을 지정된 임계값과 비교하는 작업이 포함됩니다. 이는 입력 이미지의 모든 픽셀을 두 그룹으로 나눕니다.
  1. 임계값보다 낮은 강도 값을 갖는 픽셀입니다.
  2. 임계값보다 큰 강도 값을 갖는 픽셀입니다.
이제 이 두 그룹에는 다양한 분할 유형에 따라 서로 다른 값이 지정됩니다. OpenCV는 다음 함수를 사용하여 회색조(8비트) 이미지에 대해 5가지 서로 다른 임계값 체계를 지원합니다. 이중 임계값(InputArray src OutputArray dst 이중 임계값 이중 maxval int 유형) 매개변수:
  • InputArray src: 입력 이미지(Mat 8비트 또는 32비트)
  • OutputArray dst: 출력 이미지(입력과 동일한 크기)
  • double thresh: 임계값 설정
  • double maxval: 타입 1, 2에서 사용되는 maxVal
  • int type* : 사용할 임계값 유형을 지정합니다. (0-4)
  • *아래에는 임계값 유형 목록이 제공됩니다. 입력 이미지 원본' title= 입력 RGB 이미지는 임계값 지정이 완료되기 전에 먼저 회색조 이미지로 변환됩니다. OpenCV: 임계값을 사용한 분할' title= 임계값 유형
      바이너리 임계값(int 유형=0) 0_130' title= 이전에 얻은 두 그룹 중 설정된 임계값보다 큰 픽셀 강도를 가진 구성원이 있는 그룹에는 Max_Value가 할당되거나 회색조의 경우 값 255(흰색)가 할당됩니다. 나머지 그룹의 구성원은 픽셀 강도가 0(검은색)으로 설정되어 있습니다. EQ1' title= 소스 이미지의 (x y)에 있는 픽셀 강도 값이 임계값보다 큰 경우 최종 이미지의 값은 maxVal로 설정됩니다. 역이진 임계값(int 유형=1) 1_130' title= 투자 바이너리 임계값은 바이너리 임계값과 동일합니다. Inv.Binary의 유일한 차이점은 설정된 임계값보다 큰 픽셀 강도를 갖는 그룹에 '0'이 할당되는 반면 임계값보다 낮은 강도를 갖는 나머지 픽셀은 maxVal로 설정된다는 점입니다. eq2' title= 소스 이미지의 (xy)에 있는 픽셀 강도 값이 임계값보다 크면 최종 이미지의 값은 0으로 설정되고 그렇지 않으면 maxVal로 설정됩니다. 임계값 자르기(int 유형=2) 2_150' title= 설정된 임계값보다 큰 픽셀 강도를 갖는 그룹은 설정된 임계값으로 잘립니다. 즉, 픽셀 값은 설정된 임계값과 동일하게 설정됩니다. 다른 모든 값은 동일하게 유지됩니다. eq3' title= 원본 이미지의 (xy)에 있는 픽셀 강도 값이 임계값보다 크면 최종 이미지의 값은 임계값으로 설정되고 그렇지 않으면 변경되지 않습니다. 0에 대한 임계값(int 유형=3) OpenCV: 임계값을 사용한 분할' title= 임계값보다 작은 픽셀 강도 값을 갖는 그룹의 모든 픽셀에 대해 픽셀 강도를 '0'으로 설정하는 매우 간단한 임계값 지정 기술입니다. eq4' title= 원본 이미지의 (x y)에 있는 픽셀 강도 값이 임계값보다 크면 최종 이미지의 (x y)에 있는 값은 변경되지 않습니다. 나머지 픽셀은 모두 '0'으로 설정됩니다. 0으로의 임계값 반전(int 유형=4) OpenCV: 임계값을 사용한 분할' title= 이전 기술과 유사하게 임계값보다 큰 픽셀 강도 값을 갖는 그룹의 모든 픽셀에 대해 픽셀 강도를 '0'으로 설정합니다. eq5' title= 원본 이미지의 (x y)에 있는 픽셀 강도 값이 임계값보다 큰 경우 최종 이미지의 (x y)에 있는 값은 '0'으로 설정됩니다. 나머지 픽셀 값은 모두 변경되지 않습니다.
    OpenCV 프로그램을 컴파일하려면 시스템에 OpenCV 라이브러리가 설치되어 있어야 합니다. 앞으로 이에 대한 간단한 튜토리얼을 게시할 예정입니다. OpenCV를 이미 설치한 경우 선택한 입력 이미지로 아래 코드를 실행하세요. CPP
    // CPP program to demonstrate segmentation // thresholding. #include  #include  #include  #include  using namespace cv; int main(int argc char** argv) {  if (argc != 2)   {  cout << ' Usage: '  '   ' << endl;  return -1;  }  int threshold_value = 0;  // Valid Values: 0 1 2 3 4  int threshold_type = 2;   // maxVal useful for threshold_type 1 and 2  int maxVal = 255;   // Source image  Mat src = imread(argv[1] 1);  cvNamedWindow('Original' CV_WINDOW_NORMAL);  imshow('Original' src);  Mat src_gray dst;  // Convert the image to GrayScale  cvtColor(src src_gray CV_BGR2GRAY);  // Create a window to display results  cvNamedWindow('Result' CV_WINDOW_NORMAL);  createTrackbar('Threshold' 'Result'   &threshold_value 255);  while (1)   {  threshold(src_gray dst threshold_value   maxVal threshold_type);  imshow('Result' dst);  waitKey(1);  } }