1

ExposureCompensatorクラスを使用しようとしています。小さな画像を大きな画像に貼り付けようとしていますが、貼り付ける前に 2 つの画像の明るさのバランスを取りたいと考えています。ただし、コードを実行するsmallImageと、黒い画像として返されます。

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

1 に答える 1

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);
于 2016-08-17T02:46:29.527 に答える