opencvC + 학습 3MT 대상

5812 단어 opencv
opencvC + 학습 3MT 대상
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);
매트 대상 사용 - 네 가지 포인트
  • 출력 이미지 의 메모 리 는 자동 으로 분 배 됩 니 다
  • OpenCV 의 C + + 인 터 페 이 스 를 사용 하여 메모리 배분 문 제 를 고려 할 필요 가 없다
  • 할당 작업 과 복사 구조 함 수 는 머리 부분 만 복사 합 니 다
  • clone 과 copy To 두 함수 로 데이터 완전 복사
  • Mat 개체 생 성
    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;
    }
    
    

    효과:
    직접 해 보 세 요.

    좋은 웹페이지 즐겨찾기