2013-05-02 31 views
1

我正在嘗試使用ExposureCompensator類。我試圖將一個小圖像粘貼到一個更大的圖像,但粘貼之前我想平衡兩個圖像的亮度。但是,當我運行代碼時,smallImage將返回爲黑色圖像。爲什麼ExposureCompensator會給出黑色圖像?

PS:另外,如果我使用ExposureCompensator::GAIN_BLOCK它給出了一個錯誤,整數除零。

int num_images = 2; 
int img_idx = 1; 

//left and top corner position of small image 
int left = 300; 
int top = 400; 
vector<Point> corners(num_images); 
vector<Mat> images_warped(num_images); 
vector<Mat> masks_warped(num_images); 

images_warped.push_back(bigImage); 
images_warped.push_back(smallImage); 

corners.push_back(Point(0, 0)); 
corners.push_back(Point(left, top)); 

//created two white Mats as masks 
Mat bigMask, smallMask; 
bigMask.create(bigImage.size(), CV_8U); 
bigMask.setTo(Scalar::all(255)); 

smallMask.create(smallImage.size(), CV_8U); 
smallMask.setTo(Scalar::all(255)); 

masks_warped.push_back(bigMask); 
masks_warped.push_back(smallMask); 

int expos_comp_type = detail::ExposureCompensator::GAIN; 
Ptr<detail::ExposureCompensator> compensator = detail::ExposureCompensator::createDefault(expos_comp_type); 
compensator->feed(corners, images_warped, masks_warped); 
compensator->apply(img_idx, corners[img_idx], smallImage, smallMask); 

回答

0

如果在代碼創建矢量對象:

vector<Point> corners(num_images); 
vector<Mat> images_warped(num_images); 
vector<Mat> masks_warped(num_images); 

對象的大小將是2. 所述的push_back()方法之後,將大小爲4。

嘗試將上述代碼替換爲:

vector<Point> corners(0); 
vector<Mat> images_warped(0); 
vector<Mat> masks_warped(0); 
相關問題