OpenCV - Mat 구조 상세 설명
6181 단어 opencv
Mat 의 흔 한 속성
data uchar 。Mat : ,data 。
dims , 5*6 , dims=2, dims=3.
rows
cols
size ,size(cols,rows)
channels , , RGB
type , , CV_( )+( )+( ) :,CV_8UC3
depth , type 。 type CV_8UC3, 2 16 。 ,depth CV_8UC
elemSize
Mat 는 매우 많은 생 성 방법 이 있 습 니 다. 다음은 몇 가지 흔히 볼 수 있 는 방식 을 소개 합 니 다.
1. Mat M 은 데이터 가 없 는 매트릭스 헤드 를 만 듭 니 다.2、Mat M(2,2,CV_8UC3,Scalar(0,0,1)); 2 * 2 크기 의 행렬, 각 요 소 는 3 채널 8 비트 부호 없 는 정수 입 니 다. 다음 과 같 습 니 다. 0, 01, 0, 1, 0, 1, 0, 1, 3, Mat M (2, 2, CV 8UC1, Scalar (10);위 와 유사: 10, 10, 10, 4, Mat M (2, 2, CV 8UC 1, Scalar:: all (0);데이터 가 모두 0 입 니 다.5、Mat M = (Mat_(3,3) << 1,2,3,4,5,6,7,8,9); 초기 화 할당 주의 문제: Mat 는 row (), col () 함 수 를 통 해 각 줄 에 접근 할 수 있 습 니 다. Mat 구 조 는 clone (), copy To () 함 수 를 통 해 복사 할 수 있 습 니 다. 직접 할당 하면 새 Mat 의 data 를 원래 Mat 의 data 에 만 가리 키 고 데이터 필드 를 다시 만 들 지 않 습 니 다.
그 밖 에 Mat 는 행렬 을 만 들 고 초기 화 하 는 데 자주 사용 되 는 함수 도 있 습 니 다. Mat E = Mat: eye (4, 4, CV 64F);Mat Z = Mat::zeros(4,4,CV_32F); Mat O = Mat::ones(4,4,CV_8UC1); 각각 4 * 4 의 단위 행렬, 0 행렬, 1 행렬 을 만 드 는 데 사 용 됩 니 다. Matlab 의 행렬 과 유사 합 니 다.
Mat 데이터 출력
vs 에서 Mat 출력 데 이 터 는 매우 편리 합 니 다. cout 를 직접 사용 하면 Mat 의 데 이 터 를 데이터 할 수 있 고 서로 다른 출력 형식 도 포함 되 어 있 습 니 다.format (Mat, ") 함 수 를 통 해 이 루어 질 수 있 습 니 다." "의 서로 다른 값 은 서로 다른 출력 형식 을 대표 합 니 다. C, python, csv, numpy, 기본 형식 은 matlab 와 같 습 니 다.
Mat 데이터 읽 기와 옮 겨 다 니 기
Mat 는 주로 이미지 데 이 터 를 저장 하 는 데 사용 되 기 때문에 데이터 의 옮 겨 다 니 는 방법 을 상세 하 게 설명 하지 않 습 니 다. 구체 적 인 방법 은 다음 OpenCV - 이미지 의 기본 동작 을 볼 수 있 습 니 다.
다음은 Mat 에 행렬 을 만 드 는 테스트 코드 입 니 다.
#include<iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat E = Mat::eye(4,4,CV_64F);
Mat Z = Mat::zeros(4,4,CV_32F);
Mat O = Mat::ones(4,4,CV_8UC1);
cout << "E:
" << E << endl;
cout << "Z:
" << Z << endl;
cout << "O:
" << O << endl;
Mat M(2,2,CV_8UC3,Scalar(0,0,1));
Mat M1(2,2,CV_8UC1,Scalar::all(0));
Mat M2;
M2.create(2,2,CV_8UC1);
Mat M3 = (Mat_<double>(3,3) << 1,2,3,4,5,6,7,8,9);
Mat M4 = M3.row(1);
Mat M5(5,5,CV_8UC1,Scalar(10));
cout << "M:
" << M << endl;
cout << "M1:
" << M1 << endl;
cout << "M2:
" << M2 << endl;
cout << "M3:
" << M3 << endl;
cout << "M4:
" << M4 << endl;
cout << "M4(Format C):
" << format(M4,"C") << endl; //
cout << "M5:
" << M5 << endl;
waitKey(0);
return 0;
}
다음으로 이동:http://blog.sina.com.cn/s/blog_6a0e04380100r289.html
매트릭스 데이터 형식:
CV_<bit_depth>(S|U|F)C<number_of_channels>
S = 기호 정형 U = 부호 없 는 정형 F = 부동 소수점 형
E.g.:
CV_8UC1 은 8 비트 부호 없 는 단일 채널 행렬 을 말한다.
CV_32FC 2 는 32 비트 부동 소수점 형 2 채널 행렬 을 말한다.
CV_8UC1 CV_8SC1 CV_16U C1 CV_16SC1 CV_8UC2 CV_8SC2 CV_16UC2 CV_16SC2 CV_8UC3 CV_8SC3 CV_16UC3 CV_16SC3 CV_8UC4 CV_8SC4 CV_16UC4 CV_16SC4 CV_32SC1 CV_32FC1 CV_64FC1 CV_32SC2 CV_32FC2 CV_64FC2 CV_32SC3 CV_32FC3 CV_64FC3 CV_32SC4 CV_32FC4 CV_64FC4
그 중에서 통 로 는 점 마다 몇 개의 수 를 저장 할 수 있 는 지 를 나타 내 는데 RGB 컬러 그림 의 모든 픽 셀 점 은 세 개의 값, 즉 세 개의 채널 과 유사 하 다.
그림 속 의 깊이 는 각 값 이 몇 자리 에 저장 되 는 지 를 나타 내 는 정밀도 문제 이 고 일반 그림 은 8bit (비트) 이면 깊이 는 8 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ip camera android에 액세스하고 java를 사용하여 모니터에 표시그런 다음 PC에서 다운로드 폴더를 추출해야 합니다 그런 다음 프로젝트 폴더에 다운로드한 javacv 라이브러리를 추가해야 합니다. 먼저 라이브러리 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 jar/폴더 추가를 선택...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.