12

OpenCV を使用して、同じウィンドウに水平方向に隣接する 2 つの画像を表示しようとしています。

これにadjustROI関数を使用してみました。画像1は幅1088ピクセル、高さ2208ピクセルですが、画像2は幅1280ピクセル、高さ2208ピクセルです。以下のコードで何が間違っているのか教えてください。同様に、Image2 のコンテンツを含む Image2 のサイズを変更します。

Mat img_matches=Mat(2208,2368,imgorig.type());//set size as combination of img1 and img2
img_matches.adjustROI(0,0,0,-1280); 
imgorig.copyTo(img_matches);
img_matches.adjustROI(0,0,1088,1280);
imgorig2.copyTo(img_matches);
4

3 に答える 3

28

編集:これがあなたがやりたいことをする方法です:

Mat left(img_matches, Rect(0, 0, 1088, 2208)); // Copy constructor
imgorig.copyTo(left);
Mat right(img_matches, Rect(1088, 0, 1280, 2208)); // Copy constructor
imgorig2.copyTo(right);

コピー コンストラクターは、Mat各 によって定義された ROI を指すヘッダーのコピーを作成しますRect

完全なコード:

#include <cv.h>
#include <highgui.h>

using namespace cv;

int
main(int argc, char **argv)
{
    Mat im1 = imread(argv[1]);
    Mat im2 = imread(argv[2]);
    Size sz1 = im1.size();
    Size sz2 = im2.size();
    Mat im3(sz1.height, sz1.width+sz2.width, CV_8UC3);
    Mat left(im3, Rect(0, 0, sz1.width, sz1.height));
    im1.copyTo(left);
    Mat right(im3, Rect(sz1.width, 0, sz2.width, sz2.height));
    im2.copyTo(right);
    imshow("im3", im3);
    waitKey(0);
    return 0;
}

以下でコンパイル:

g++ foo.cpp -o foo.out `pkg-config --cflags --libs opencv`

EDIT2:

でどのように見えるかは次のadjustROIとおりです。

#include <cv.h>
#include <highgui.h>

using namespace cv;

int
main(int argc, char **argv)
{
    Mat im1 = imread(argv[1]);
    Mat im2 = imread(argv[2]);
    Size sz1 = im1.size();
    Size sz2 = im2.size();
    Mat im3(sz1.height, sz1.width+sz2.width, CV_8UC3);
    // Move right boundary to the left.
    im3.adjustROI(0, 0, 0, -sz2.width);
    im1.copyTo(im3);
    // Move the left boundary to the right, right boundary to the right.
    im3.adjustROI(0, 0, -sz1.width, sz2.width);
    im2.copyTo(im3);
    // restore original ROI.
    im3.adjustROI(0, 0, sz1.width, 0);
    imshow("im3", im3);
    waitKey(0);
    return 0;
}

現在の ROI が何であるかを追跡する必要があり、ROI を移動するための構文は少し直感的でない場合があります。結果は、コードの最初のブロックと同じです。

于 2012-10-30T05:59:40.120 に答える