c++ - 为什么 ExposureCompensator 结果给出黑色图像?

标签 c++ opencv

我正在尝试使用 ExposureCompensator 类。我正在尝试将一个小图像粘贴到一个更大的图像上,但在粘贴之前我想平衡两个图像的亮度。但是,当我运行代码时,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);

最佳答案

如果您在代码中创建 vector 对象:

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

关于c++ - 为什么 ExposureCompensator 结果给出黑色图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16345367/

相关文章:

python - 文本到图像总是灰色的

opencv - 从视差生成3D点

Python OpenCV chamerMatching函数引用

c++ - vector vector 的快速分配

C++ - 删除包含 vector 的结构 vector 会导致内存泄漏吗?

C++数组和动态内存

c++ - 在 lambda 上使用条件运算符调用 std::any_of 会产生意想不到的结果

c++ - 如何在cmake中使用autouic将头文件和ui文件放在不同的文件夹中

OpenCV 2.4.7 Mat::convertTo() 32 位到 16 位截断

opencv - 根据颜色移动鼠标