opencvC + 학습 3MT 대상
5812 단어 opencv
Mat 대상 OpenCV 2.0 이후 도 입 된 이미지 데이터 구조, 자동 할당 메모리, 메모리 누 출 문제 가 없 는 대상 지향 데이터 구조 다.두 부분, 머리 와 데이터 부분 으로 나 뉘 었 습 니 다.
IplImage 는 2001 년 OpenCV 발표 이후 줄곧 존재 해 왔 으 며 C 언어 스타일 의 데이터 구조 로 개발 자가 스스로 메모 리 를 분배 하고 관리 해 야 하 며 큰 프로그램 에 사용 하면 메모리 누 출 문제 가 발생 하기 쉽다.
Mat 개체 사용
부분 복사: 일반적으로 Mat 대상 의 머리 와 포인터 부분 만 복사 하고 데이터 부분 은 복사 하지 않 습 니 다.
Mat A= imread(imgFilePath); Mat B (A) / / 복사 만
완전 복사: Mat 대상 의 머리 와 데이터 부분 을 함께 복사 하려 면 다음 과 같은 두 API 를 통 해 이 루어 질 수 있 습 니 다.
Mat F = A.clone(); 또는 Mat G;A.copyTo(G);
매트 대상 사용 - 네 가지 포인트
cv:: Mat:: Mat 구조 함수
Mat M (2, 2, CV 8UC 3, Scalar (0, 0, 255) 중 앞의 두 매개 변 수 는 각각 줄 (row) 과 열 (column), 세 번 째 CV 를 나타 낸다.8UC3 중의 8 은 각 채널 이 8 위 를 차지 하고 U 는 기호 가 없 음 을 나타 내 며 C 는 Char 유형 을 나타 내 고 3 은 채널 수 를 3 으로 나타 내 며 네 번 째 매개 변 수 는 벡터 로 각 픽 셀 수 치 를 초기 화 하 는 것 이 얼마 인지 나타 내 고 벡터 길 이 는 대응 채널 수 와 일치 합 니 다.
다 차원 배열 cv 만 들 기:: Mat:: create
int sz[3] = {2,2,2}; Mat L(3,sz, CV_8UC1, Scalar::all(0));
#include
using namespace cv;
using namespace std;
char INPUT_WIN[] = "input_image";
char OUTPUT_WIN[] = "output_image";
int main()
{
Mat src = imread("D:/opencvSRC/test.jpg");
if( !src.data ){
cout << "imread error1" << endl;
return -1;
}
namedWindow(INPUT_WIN, WINDOW_AUTOSIZE);
imshow(INPUT_WIN, src);
// , src ,
Mat dst;
dst = Mat(src.size(), src.type());
dst = Scalar(130, 130, 130);//
namedWindow("output", CV_WINDOW_AUTOSIZE);
imshow("output", dst);
//
Mat m1;
m1.create(src.size(), src.type());
m1 = Scalar(0, 0, 255);
namedWindow("m1", CV_WINDOW_AUTOSIZE);
imshow("m1", m1);
//
Mat M(9, 9, CV_8UC3, Scalar(127, 127, 127));
cout << "M =" << endl << M << endl;
namedWindow("M", CV_WINDOW_AUTOSIZE);
imshow("M", M);
//
Mat dst2 = src.clone();
namedWindow("output2", CV_WINDOW_AUTOSIZE);
imshow("output2", dst2);
//
Mat dst3;
src.copyTo(dst3);
namedWindow("output3", CV_WINDOW_AUTOSIZE);
imshow("output3", dst3);
//
Mat m2 = Mat::eye(4, 4, CV_8UC1);
cout << "m2 =" << endl << m2 << endl;
namedWindow("m2", CV_WINDOW_AUTOSIZE);
imshow("m2", m2);
Mat m3 = Mat::zeros(4, 4, CV_8UC1);
cout << "m3 =" << endl << m3 << endl;
namedWindow("m3", CV_WINDOW_AUTOSIZE);
imshow("m3", m3);
//
Mat C = (Mat_<double>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
cout << "C = " << endl << " " << C << endl << endl;
waitKey(0);
return 0;
}
효과:
직접 해 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.