2014-02-25 26 views
0

予加载的图像original_pre尺寸160x60的,以下是代码为什么垫子类型不同?

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); 

此时,floodFill操作original_mat和original_open_mat的类型是不同的后。 印刷结果是

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_open_mat的类型是16 为什么呢?

回答

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