Próbuję połączyć dwa obrazy. Jest to łatwe, jeśli mają ten sam rozmiar, ale jeśli jedno z obrazów jest mniejsze lub większe, cv :: addWeighted kończy się niepowodzeniem.Kopiowanie/mieszanie obrazów o różnych rozmiarach za pomocą opencv
Obrazek A (oczekuje się powiększenie) Obraz B (oczekuje się, że będzie mniejszy)
Próbowałem stworzyć ROI - próbował stworzyć trzeci obraz wielkości i kopiowania B wewnątrz - Mogę wydaje się, że to prawda. Proszę pomóż.
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());
Nawet coś cvSetImageROI - mogą działać, ale nie mogę znaleźć odpowiednik C++ - może pomóc - ale nie wiem, jak go używać, aby nadal zachować zawartość obrazu, tylko umieścić kolejne zdjęcie wewnątrz ROI ...
Czy chcesz, aby 'out_image' było (1) przyciętą częścią' A' zmieszaną z 'B' (a więc wielkością' B') lub (2) rozmiar 'A' z wybraną częścią zmieszaną z' B' (stąd rozmiar 'A')? – Jacob
Wielkość A - z zaznaczoną sekcją połączoną z B – Thalia
Dlaczego "szerokość = (* wartości wejściowe) .at (0) .cols - 1"? Dlaczego nie '(* input_images) .at (0) .cols'? – Jacob