2014-02-25 7 views
0

난 original_mat 및 original_open_mat의 종류가 다른 인 플러드 필 동작 후의 코드매트 유형이 다른 이유는 무엇입니까?

original_pre = cvLoadImage(input, 0); 
int border = 5; 
CvMat* original_mat = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3); 
original = cvCreateImage(cvSize(original_pre->width-2*border, original_pre->height-2*border), original_pre->depth, original_pre->nChannels); 
cvGetSubRect(original_pre, original_mat, cvRect(border,border,original_pre->width-2*border,original_pre->height-2*border)); 

cvFloodFill(original_mat,cvPoint(0,0),cvScalarAll(0),cvScalarAll(1),cvScalarAll(1)); 
CvMat* original_open_mat = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3); 
CvMat* temp = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3); 
cout<<original_mat->width<<" "<<original_mat->height<<" "<<original_open_mat->width<<" "<<original_open_mat->height<<" "<<CV_MAT_TYPE(original_mat->type)<<" "<<CV_MAT_TYPE(original_open_mat->type)<<" "<<CV_8UC3<<endl; 
cvMorphologyEx(original_mat,original_open_mat,temp,NULL,CV_MOP_OPEN); 

되어 다음 크기의 160x60 original_pre하는 이미지를로드. original_open_mat의 타입이 16 왜 동안 0 인쇄 결과는

150 50 150 50 0 16 16 
OpenCV Error: Assertion failed (src.size() == dst.size() && src.type() == dst.type()) in cvMorphologyEx, file /home/ataosky/software/OpenCV-2.4.3/modules/imgproc/src/morph.cpp, line 1353 

original_mat의 유형은 무엇입니까?

답변

0

간단한 이미지로 코드를 실행하면 완벽하게 작동합니다. 다음은 코드와 결과입니다. original_pre원래은 코드 블록에 없기 때문에 IplImage * 유형입니다.

IplImage* original_pre = cvLoadImage("G:\\test.png"); 
int border = 5; 
    CvMat* original_mat = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3); 
IplImage* original = cvCreateImage(cvSize(original_pre->width-2*border, original_pre->height-2*border), original_pre->depth, original_pre->nChannels); 
cvGetSubRect(original_pre, original_mat, cvRect(border,border,original_pre->width- 2*border,original_pre->height-2*border)); 

cvFloodFill(original_mat,cvPoint(50,55),cvScalarAll(255),cvScalarAll(0),cvScalarAll(0)); 
CvMat* original_open_mat = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3); 
CvMat* temp = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3); 
cout<<original_mat->width<<" "<<original_mat->height<<" "<<original_open_mat->width<<" "<<original_open_mat->height<<" "<<CV_MAT_TYPE(original_mat->type)<<" "<<CV_MAT_TYPE(original_open_mat->type)<<" "<<CV_8UC3<<endl; 
cvMorphologyEx(original_mat,original_open_mat,temp,NULL,CV_MOP_OPEN); 
cvSaveImage("G:\\temp_.jpg",original_open_mat); 

원본 이미지

Original Image

결과

Result

관련 문제