Opencv-C++ 참고 사항(3): Opencv 라이브러리 소개 및 C++로 변환

1. Opencv 라이브러리 소개

여기에 이미지 설명 삽입
calib3d는 주로 카메라 보정 및 스테레오 비전 기능을 포함합니다: 객체 포즈 추정, 3D 재구성, 데이터 구조, 그리기 기능, 배열 작업 및 기타 기능 dnn, 딥 러닝 모듈과
같은 라이브러리의 기본 구조 및 작동을 포함한 카메라 보정 코어,
네트워크 구축, 직렬화 모델 로드를 포함하지만 훈련을 지원하지 않고
feature2d를 추론할 수만 있으며 이미지 특징 포인트, 특징 감지, 설명 일치 및 기타
플랜을 처리할 수 있습니다. 이 모듈은 고차원 근사 최근접 이웃 빠른 검색 알고리즘입니다. 라이브러리는 주로 클러스터링 등을 통한 빠른 근사치 최근접 이웃 검색을 포함합니다.
gapi, 이미지 처리 가속화를 위한 프레임워크, 특정 알고리즘 없음
highgui, 이미지 조작 및 표시용 창 생성, 마우스 이벤트 및 키보드 명령 처리, 대화형 시각적 인터페이스 제공
imgcodecs 이미지 저장 및 읽기
imgproc, 이미지 처리 모델, 필터링, 형상 변환 , 히스토그램, 특징 감지 객체 감지 등
ml, 기계 학습 모듈, 통계 분류, 회귀, 클러스터링 등
objdetect, 대상 감지 MOOC, Haar 기능 등 사진, 사진 모델은 이미지 복원, 노이즈 제거 스티칭, 특징점 검색 및 매칭, 추정을 포함한 이미지 스티칭
에 사용됩니다.
선택 , 자동 보정, 솔기 등 (ah this)
비디오, 모션 추정을 위한 비디오 분석 모델, 배경 분리, 객체 추적 등
videoio, 비디오 입력, 출력 모듈.

다음과 같이 설명됩니다.

calib3d

사실 캘리브레이션(Calibration)과 3D의 합성어 약자입니다. 이 모듈은 주로 카메라 보정 및 3D 재구성과 관련이 있습니다. 기본 다시점 기하학 알고리즘, 단일 스테레오 카메라 보정, 객체 포즈 추정, 스테레오 유사성 알고리즘, 3D 정보 재구성 등

기여

[contrib]: Contributed/Experimental Stuf의 약자입니다.
이 모듈에는 최근에 추가된 불안정한 선택적 기능이 포함되어 있으므로 걱정할 필요가 없습니다. 2.4.10의 이 모듈에는 새로운 얼굴 인식, 스테레오 매칭, 인공 망막 모델 및 기타 기술이 있습니다.

핵심

OpenCV 기본 데이터 구조 동적 데이터 구조 그리기 기능 배열 연산 관련 기능 보조 기능 및 시스템 기능과 OpenGL과의 매크로 연동

imgproc

선형 및 비선형 이미지 필터링

이미지의 기하학적 변환

기타(기타)
이미지 변환
, 히스토그램 상관관계,
구조 분석 및 형상 설명,
동작 분석 및 객체 추적,
특징 감지,
객체 감지 등

피처2d

[features2d]: 즉, 다음 내용을 포함하는 Features2D, 2D 기능 프레임워크

기능 감지 및 설명
기능 감지기 일반 인터페이스
설명자 추출기 일반 인터페이스
설명자 일치자 일반 인터페이스
일반 설명자 일치자 일반 인터페이스
키포인트 그리기 함수 및 일치 함수 그리기 기능

창백한

[flann]: 근사 최근
접 이웃을 위한 고속 라이브러리, 고차원 근사 최근접 이웃 고속 검색 알고리즘 라이브러리, 두 부분 포함: 고속 근사 최근접 이웃 검색 및 클러스터링

  [gpu]: 运用GPU加速的计算机视觉模块

하이귀

[highgui]: 즉, 미디어 I/O 입력 및 출력,
비디오 캡처, 이미지 및 비디오 인코딩 및 디코딩, 그래픽 대화형 인터페이스의 인터페이스 등을 포함하는 높은 GUI, 높은 수준의 GUI 그래픽 사용자 인터페이스입니다.

유산

모션 분석
​​예상 최대화
히스토그램
평면 세분화(C API)
기능 감지 및 설명
설명자 추출기용 일반 인터페이스 일반
설명자 매처용 일반 인터페이스
매처

ml

[ml]: 기계 학습, 기계 학습 모듈, 기본적으로 통계 모델 및 분류 알고리즘, 다음 내용 포함

통계 모델
일반 베이즈 분류기
K-최근접 이웃
지원 벡터 머신
결정 트리
부스팅
그래디언트 부스트 트리)
랜덤 트리
매우 무작위화된 트리
기대 최대화
신경망
MLData

자유롭지 못한

[nonfree]: 즉, 기능 감지 및 GPU 관련 콘텐츠를 포함한 일부 특허 알고리즘 모듈입니다. 상업적으로 사용하지 않는 것이 가장 좋습니다. 고소당할 수 있습니다.

물체 감지

[objdetect]: 캐스케이드 분류(캐스케이드 분류) 및 잠재 SVM을 포함한 객체 감지 모듈.

ocl

[ocl]: OpenCL 가속 컴퓨터 비전, OpenCL에 의해 가속화된 컴퓨터 비전 구성 요소 모듈

사진

[사진]: 이미지 복원 및 이미지 노이즈 제거를 포함한 전산 사진

바느질

[스티칭]: 이미지 스티칭, 이미지 스티칭 모듈, 다음 부품 포함:

스티칭 파이프라인
특징 찾기 및 이미지 일치
회전 추정 이미지 스큐
자동 보정 심 추정 노출 보정 이미지 블렌딩



수퍼레스

TS

동영상

이 모듈에는 모션 추정, 배경 분리, 객체 추적 및 기타 비디오 처리 관련 콘텐츠가 포함됩니다.

동영상 탭

[Videostab]: 비디오 안정화, 비디오 안정화 관련 구성 요소

2. C++ 및 MAT 변환 방법

2.1, 1차원 벡터

 //定义一维vector
vector<float> channel_data; 

//向vector中添加元素,用push_back
for (int j = 0; j < numMic; j++){
    
    
    channel_data.push_back(*m_dataMic);
}

//求vector长度
int Len_data = vector.size(); 

//索引数据
channel_data[i]

//求vector中的最大值及位置
auto maxPosition = max_element(channel_data.begin(), channel_data.end());
cout << *maxPosition << " at the postion of " << maxPosition - channel_data.begin

2.2, 2차원 벡터

vector<vector<float>> power;  //定义二维vector
vector<float> add_power;  //定义一维vector
//std::vector<std::vector<float>> power;  //定义二维vector
//std::vector<float> add_power;  //定义一维vector
for (int i=0; i<Len1; i++)
{
    
    
    //给1维vector添加元素
    for (int j=0; j<Len2; j++)
    {
    
    
        add_power.push_back(amplite_planes1[j]);
    }
    power.push_back(add_power) //给2维vector添加元素
}

int n = power.size();       //Len1的长度
int m = power[0].size();   //Len2的长度

//求2维vector中的最大值及位置
float max_power = 0.0;
int pos[2];
for (int p = 0; p < power.size(); p++)//求2维Vector的最大值
{
    
    
	auto maxPosition = max_element(power[p].begin(), power[p].end());
	if (max_power <= *maxPosition){
    
    
		max_power = *maxPosition;
                pos[0] = p;//第几行
                pos[1] = maxPosition-power[p].begin();//第几列
	}
}

2.3 어레이

//一维数据维度计算
int num=0;
num=sizeof(Array)/sizeof(Array[0]);

//二维数组维度计算
int Array[5][5];
int numberOfRow,numberOfCol,len;
numberOfCol=sizeof(Array[0])/sizeof(int);
len=sizeof(Array)/sizeof(int);
numberOfRow=len/numberOfCol;

2.4, 유형 변환 - 1차원 변환 배열

vector<float> channel_data3; //定义一维vector;假定channel_data3已添加了元素
float *singleChannel_data = new float[Len];
for (int i = 0; i < Len; i++)
{
    
    
    singleChannel_data[i] = channel_data3[i];
}

2.5 유형 변환 -------- 1차원 MAT를 배열로

//转8位一维数组
uchar *array = new unsigned char[mat.rows*mat.cols];
if (mat.isContinuous())
    array = mat.data;

2.6, 유형 변환 -------- 2차원 벡터를 매트로

std::vector<std::vector<float>> power;  //定义二维vector

// 二维Vector转换为Mat类型的mat_power
// Create a new, _empty_ cv::Mat with the row size of OrigSamples
cv::Mat mat_power(0, power[0].size(), cv::DataType<float>::type);
for (unsigned int i = 0; i < power.size(); ++i)
{
    
    
	// Make a temporary cv::Mat row and add to NewSamples _without_ data copy
	cv::Mat Sample(1, power[0].size(), cv::DataType<float>::type, power[i].data());
	mat_power.push_back(Sample);
}

//查看二维Mat元素
power.ptr<float>(0),32 //查看第0行0-31列的32个元素

2.7 유형 변환 -------- 2D 매트에서 벡터로

//初始化二维vector维度
vector<vector<float>> R_vec;
R_vec.resize(num_row);//行
for (int c = 0; c < R_vec.size(); c++){
    
    
	R_vec[c].resize(num_col);//列
}
//R为2维Mat
for (int x = 0; x < R.rows; x++) {
    
    
	for (int y = 0; y < R.cols; y++) {
    
    
		//R_vec[x][y] = R.at<float>(x, y);
		R_vec[x][y] = R.ptr<float>(x)[y];
		//std::cout << boxPts.at<float>(x, y) << std::endl;
	}
}

추천

출처blog.csdn.net/jiyanghao19/article/details/131231866