2015-04-01 2 views
3

Я ищу способ разместить изображение поверх другого изображения в определенном месте.C++ Поместите изображение поверх другого изображения в определенном месте

Я смог разместить изображения друг над другом с помощью cv::addWeighted, но когда я искал эту проблему, не было сообщений, которые я мог найти относительно C++.

Быстрый пример:

200x200 Красная площадь & 100x100 Blue Square

enter image description here&enter image description here

Blue Square на Красной площади в 70x70 (от верхнего левого Корн г Pixel Синей площади)

enter image description here

ответ

4

Вы также можете создать коврик, который указует на прямоугольную область исходного изображения и скопировать синее изображение на что:

Mat bigImage = imread("redSquare.png", -1); 
Mat lilImage = imread("blueSquare.png", -1); 

Mat insetImage(bigImage, Rect(70, 70, 100, 100)); 
lilImage.copyTo(insetImage); 

imshow("Overlay Image", bigImage); 
0

Похожие Явный алгоритм:

1 - прочитать два изображения. Например, bottom.ppm, top.ppm, 2 - Прочитайте местоположение для наложения. Например, введите желаемый верхний левый угол «top.ppm» на «bottom.ppm» be (x, y), где 0 < x < bottom.height() и 0 < y < bottom.width(), 3 - И, наконец, вложенные петли на верхнем изображении, чтобы изменить нижний пиксель за пикселем изображения:

for(int i=0; i<top.height(); i++) { 
    for(int j=0; j<top.width(), j++) { 
     bottom(x+i, y+j) = top(i,j); 
    } 
} 

обратных нижнее изображение.

+0

Вы должны указать, что то, что вы предоставили, является псевдокодом. – Antonio

1

здания из beaker answer и обобщающего до любого размера входных изображений, с некоторой погрешностью Проверка:

cv::Mat bigImage = cv::imread("redSquare.png", -1); 
const cv::Mat smallImage = cv::imread("blueSquare.png", -1); 

const int x = 70; 
const int y = 70; 
cv::Mat destRoi; 
try { 
    destRoi = bigImage(cv::Rect(x, y, smallImage.cols, smallImage.rows)); 
} catch (...) { 
    std::cerr << "Trying to create roi out of image boundaries" << std::endl; 
    return -1; 
} 
smallImage.copyTo(destRoi); 

cv::imshow("Overlay Image", bigImage); 

Проверить cv::Mat::operator()

Примечание: Возможно, это будет по-прежнему не если 2 изображения различных форматов, например, если один цвет и другие оттенки серого.

Смежные вопросы