【发布时间】:2013-07-23 23:16:39
【问题描述】:
我正在尝试混合两个图像。如果它们具有相同的大小,这很容易,但如果其中一个图像更小或更大,则 cv::addWeighted 失败。
图片 A(预计更大) 图 B(预计更小)
我尝试创建 ROI - 尝试创建 A 大小的第三张图像并在其中复制 B - 我似乎无法正确处理。请帮忙。
double alpha = 0.7; // something
int min_x = ( A.cols - B.cols)/2 );
int min_y = ( A.rows - B.rows)/2 );
int width, height;
if(min_x < 0) {
min_x = 0; width = (*input_images).at(0).cols - 1;
}
else width = (*input_images).at(1).cols - 1;
if(min_y < 0) {
min_y = 0; height = (*input_images).at(0).rows - 1;
}
else height = (*input_images).at(1).rows - 1;
cv::Rect roi = cv::Rect(min_x, min_y, width, height);
cv::Mat larger_image(A);
// not sure how to copy B into roi, or even if it is necessary... and keep the images the same size
cv::addWeighted( larger_image, alpha, A, 1-alpha, 0.0, out_image, A.depth());
即使像 cvSetImageROI 这样的东西 - 可能有效,但我找不到 c++ 等价物 - 可能会有所帮助 - 但我不知道如何使用它来保持图像内容,只在 ROI 内放置另一个图像...
【问题讨论】:
-
您希望
out_image成为 (1)A的裁剪部分与B混合(因此是B的大小)或 (2)A的大小与B混合的选定部分(因此A的大小)? -
A 的大小 - 所选部分与 B 混合
-
为什么是
width = (*input_images).at(0).cols - 1?为什么不(*input_images).at(0).cols? -
@Thalia,你能说出你在
if语句中分配给height和width的*input_images是什么吗?
标签: c++ opencv image-processing