Opencv 첫 작업

1363 단어 배우다opencv
첫 번째 숙제는 모두 거의 다 완성해서 코드 부분은 쓰기 어렵지 않다
#include
 #include    
 using namespace cv;
 using namespace std;
 Point pt1; 
 Point pt2;  
 int main()
 {	Mat A(640, 480, CV_8UC3, Scalar(255, 255, 255));	//  Mat              
         Mat B = A;	  //        
         Mat C = A.clone();	//        
         pt1.x =0.9*240 ;	
         pt1.y = 0.9*320;	
         pt2.x = 1.1*240;	
         pt2.y = 1.1*320;	
         rectangle(C,pt1, pt2, Scalar(255, 0, 0), -1, 8, 0);//         
         imshow("before_operation", A);
         imshow("after_operation", C);	
         imwrite("A.jpg", A);	
         imwrite("B.jpg", C);	
         waitKey(0);
        return 0;
}

중요한 것은 코드 부분에 대한 이해이다. 모두가 Mat가 지침과 관련이 있는 것 같다는 것을 깨달았다.사실 우리는 Mat A=imread("xxxxx")를 정의했다.이때 이 A를 두 부분으로 볼 수 있는데 하나는 그림을 저장한 부분의 큰 행렬이다.다른 하나는 그림의 크기를 기록하고 이 그림 행렬을 가리키는 헤더입니다.단순한MatB=A일 뿐이라면이 때, 당신은 단지 A의 헤더를 B에게 복사했을 뿐입니다. 이것은 인용에 해당합니다. A에 별명 B를 붙였고, 이미지를 저장할 새로운 메모리를 열지 않습니다.Mat C=A.clone()을 사용하면 이미지를 저장하는 메모리를 다시 열고 새로운 헤더를 만드는 것과 같다.그래서 Mat류의 표현은 약간 바늘과 같지만 바늘이 아니라 이미지를 저장하는 일부분이 있다. 단지 오픈cv는 큰 이미지의 복제가 속도와 메모리에 가져오는 부담을 방지하기 위해 인용 메커니즘을 채택했지만 완전히 복제하려면 괜찮다.별도로 시험해 볼 수 있다
Mat A=imread("xxxxxx");
Mat B=A;
Mat B=imread("yyyyyyyy");

어떻게 되는 거야?

좋은 웹페이지 즐겨찾기