OpenCV에서 CvType의 다양한 매개변수의 의미와 관련 방법을 이해합니다.

WBOY
풀어 주다: 2023-04-14 13:13:03
앞으로
1642명이 탐색했습니다.

1. 소개

이 글은 Java 환경을 기반으로 OpenCV 4.6.0v에서 Mat 객체 생성 시 전달되는 CvType 매개변수를 소개합니다.

CvType.CV_8UCX, CvType.CV_8SCX, CvType.CV_16UCX, CvType.CV_16SCX 등과 같은 매개변수의 역할과 의미를 잘 이해하지 못한다면

.

그래서 이 글은 OpenCV Mat에서 채널의 역할을 이해하는 데 도움이 될 것입니다.

다음 내용은 OpenCV SDK 4.6.0v

2를 기반으로 합니다. CvType

이 유형은 주로 Mat에서 데이터 유형을 정의하는 데 사용됩니다. 일반적인 사용 시나리오는 Mat를 생성할 때 정의하는 것입니다.

그렇다면 CvType 유형은 어떤 매개변수를 정의할까요? 매우 간단하게는 Mat의 이미지 데이터에 대한 두 가지 기본 표시기를 결정합니다:

  1. channels: 즉, mat.channels()에서 반환되는 값은 1~4의 세 가지 매개 변수만 될 수 있습니다.
  2. 깊이 깊이: 즉, 매트의 각 픽셀 매개변수의 저장 값 범위입니다. 값은 각 채널의 byte[] 배열에 저장되며, 각 배열의 값 범위는 깊이에 따라 결정됩니다.

채널의 개념에 대해서는 이전 글 https://zinyan.com/?p=493에서 소개한 적이 있습니다. 채널 개념에 대해 잘 모르신다면 이전 글을 읽어보시면 됩니다.

2.1 깊이-깊이

CvType 소스 코드에서 OpenCV가 8개의 깊이 매개변수를 정의한 것을 볼 수 있습니다:

public static final int
 CV_8U = 0,
 CV_8S = 1,
 CV_16U = 2,
 CV_16S = 3,
 CV_32S = 4,
 CV_32F = 5,
 CV_64F = 6,
 CV_16F = 7;
로그인 후 복사

8U, 8S, 16U, 16S, 32S, 64F 위 이름에서 , 16F 등. 앞에 있는 숫자는 비트 수(

), 즉 8bite, 16bite, 32bite, 64bite를 나타냅니다. 값 범위를 정의하는 데 사용되는 다음 문자 U, S, F는 기호와 정밀도를 나타냅니다.

  • U: 부호 없는 int, 부호 없는 정수, 즉 양의 정수
  • S: 부호 있는 int, 부호 있는 정수, 음수와 양수를 포함하지만 모두 정수입니다.
  • F: float, 단정밀도 부동 소수점 유형, 즉 소수점 포함. (PS: Float 유형 자체는 음수를 지원합니다.)

따라서 다음 정의에 따라 이해할 수 있습니다.

  • CV_8U: 매개변수 0의 값 범위를 나타내는 8비트 양의 정수입니다. ~255
  • CV_8S : 매개변수의 값 범위를 나타내는 8비트 양수 및 음수입니다. -128~127
  • CV_16U: 매개변수 0~의 값 범위를 나타내는 16비트 양의 정수입니다. 65535
  • CV_16S: 16비트 양수 및 음수이며 매개변수의 값 범위를 나타냅니다. -32768~32767
  • CV_16F: 16비트 부동 소수점 숫자이며 매개변수의 값 범위를 나타냅니다. -65504~ 65504
  • CV_32S: 32비트 양의 정수이며 매개변수 값 범위를 나타냅니다. 2147483648 ~2147483647
  • CV_32F: 32비트 부동 소수점 숫자로 매개변수 값 범위 1.18x10^-38^~3.40을 나타냅니다. x10^38^
  • CV_64F: 매개변수 값 범위를 나타내는 64비트 부동 소수점 숫자입니다. 2.23x10 ^-308^~1.79x10^308^

PS: 부동 소수점의 정밀도 및 범위 문제에 관하여 번호로 검색하시면 더 자세한 내용을 보실 수 있습니다. 위의 매개변수 범위는 네트워크 요약을 통해 얻습니다.

2.2 채널

OpenCV 정의에서 채널의 최대 개수는 4개, 최소 개수는 1개입니다. 이는 CvType 클래스에 정의된 C1, C2, C3, C4 코드에 반영됩니다.

  • C1: 단일 채널을 나타냅니다.
  • C2: 이중 채널을 나타냅니다.
  • C3: 티를 나타냅니다.
  • C4: 4개 채널을 나타냅니다.

OpenCV에서 픽셀의 색상 값은 duble[] 이중 정밀도 부동 소수점 배열을 사용합니다. 저장.

채널은 이 double[] 배열의 길이를 정의합니다.

예를 들어, 사진이 RGB 형식의 컬러 사진인 경우 특정 색상을 결정하려면 사진의 픽셀에 R, G, B 값의 혼합이 필요합니다.

픽셀 아래에 R, G, B 값을 기록하려면 double[3] 배열이 필요합니다.

그래서 이 사진은 C3 3채널을 사용하고 있습니다.

그리고 RGB는 일반적으로 0~255 범위의 정수입니다.

OpenCV는 위에서 소개한 깊이를 사용하여 색상 값의 범위를 나타냅니다.

둘의 조합은 다음과 같습니다.

CvType.CV_8UC3: 각 채널의 매개변수 값 범위는 8비트 양의 정수, 즉 0~255

마지막으로 결합했습니다. Mat 생성 매개변수를 이해하려면 다음과 같습니다.

//zinyan:创建了一个4*4尺寸的图片。每个像素点存储了一个double[1]的数组,该数组中值的范围为0~255
Mat mat = new Mat(4, 4, CvType.CV_8UC1); //通常用来表示灰度图或黑白图

//zinyan:创建了一个5*5尺寸的图片。每个像素点存储了一个double[3]的数组,该数组中值的范围为0~255
Mat mat1 = new Mat(5, 5, CvType.CV_8UC3); //通常用来表示彩色图

//zinyan:创建了一个6*6尺寸的图片。每个像素点存储了一个double[3]的数组,该数组中值的范围为0~65535
Mat mat1 = new Mat(6, 6, CvType.CV_16UC3); //通常用来表示彩色图,颜色值范围更广。
로그인 후 복사

요약하면 CvType은 Mat의 데이터 저장 유형을 정의합니다.

Mat가 저장하는 픽셀 값 수와 각 픽셀 값의 범위를 정의합니다.

Mat의 다양한 알고리즘이 각 픽셀의 값을 처리하기 때문입니다. 수치값을 처리하고 계산을 수행하려면 각 수치값의 값 범위가 무엇인지 알고리즘에 알려주어야 합니다.

3.기타

매트가 외부에서 들어온 경우. Mat 채널 수와 각 값의 값 범위를 어떻게 결정합니까?

CvType은 유형 유형을 통해 해당 유형 값으로 변환할 수 있는 관련 쿼리 메소드를 제공합니다.

예제는 다음과 같습니다.

Mat mat = new Mat(4, 4, CvType.CV_8UC3);
int depth = CvType.depth(mat.type()); //输出结果值为 0 == CvType.CV_8U

Mat mat1 = new Mat(4, 4, CvType.CV_16SC1);
depth = CvType.depth(mat1.type()); //输出结果值为 3 == CvType.CV_16S
로그인 후 복사

또한 채널 수를 쿼리할 수도 있습니다.

Mat mat1 = new Mat(4, 4, CvType.CV_16SC1);
int channels = CvType.channels(mat1.type());//该值为1
로그인 후 복사

3.1 더 이상 사용되지 않는 CV_USRTYPE1

CvType.CV_USRTYPE1​의 값은 이미 CV_16F​와 동일합니다. 따라서 이 매개변수에는 @deprecated 주석도 표시됩니다. 버려졌다는 뜻입니다

사용하지 않는 것이 좋습니다.

3.2 ELEM_SIZE 메소드

CvType의 다른 메소드는 비교적 이해하기 쉽습니다. 마지막으로 public static final int ELEM_SIZE(int 유형) 메서드가 있습니다

이 메서드는 유형 값을 전달합니다. 이것이 소위 CvType.CV_8UC1 및 기타 매개변수 값입니다.

그러면 반환되는 것은 int 변수입니다.

이 메소드가 반환하는 변수는 각 채널의 매개변수 바이트 수를 나타냅니다. 1바이트는 8비트를 의미하므로 8비트입니다.

그래서 CV_8U, CV_8S라면 채널번호를 직접 반환해주시면 됩니다.

16비트 데이터인 경우 2*채널​, 32비트에는 4*채널​, 64비트에는 8*채널을 반환해야 합니다.

4. 요약

이것으로 OpenCV의 CvType에 대한 소개를 마칩니다.

사용 중 CvType 관련 오류가 발생하는 경우. 따라서 대부분의 경우 CvType에 대한 익숙하지 않기 때문에 발생합니다.

또는 채널과 깊이에 대한 요구 사항이 있는 알고리즘을 사용하여 오류가 발생합니다.

위 내용은 OpenCV에서 CvType의 다양한 매개변수의 의미와 관련 방법을 이해합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿