Home > Blockchain >  Copy smaller Mat to larger Mat OpenCv For Unity
Copy smaller Mat to larger Mat OpenCv For Unity

Time:04-14

I'm trying to take a smaller image mat and copy it into larger mat so I can resize it while keeping the aspect ratio of the image. So, basically this:

Example

So far, this is the code I've written:

private Mat MakeMatFrame(Texture2D image)
{
    // Texture must be of right input size
    Mat img_mat = new Mat(image.height, image.width, CvType.CV_8UC4, new Scalar(0, 0, 0, 255));
    texture2DToMat(image, img_mat);
    return img_mat;
}


private void letterBoxImage(Texture2D image)
{
    // Get input image as a mat
    Mat source = MakeMatFrame(image);

    // Create the mat that the source will be put in
    int col = source.cols();
    int row = source.rows();
    int _max = Math.Max(col, row);
    Mat resized = Mat.zeros(_max, _max, CvType.CV_8UC4);

    // Fill resized
    Mat roi = new Mat(resized, new Rect(0, 0, col, row));
    source.copyTo(roi);

    Texture2D tex2d = new Texture2D(resized.cols(), resized.rows());
    matToTexture2D(resized, tex2d);
    rawImage.texture = tex2d;
}

Everything I've looked at tells me this is the right approach to take (get a region of interest, fill it in). But instead of getting that third image with the children above the gray region, I just have a gray region.

In other words, the image isn't copying over properly. I've trying using a submat as well, but it failed miserably.

I've been looking for C# code on how to do this sort of thing with OpenCv For Unity, but I can only find C code. Which tells me to do exactly this.

Is there some sort of "apply changes" function I'm unaware of for Mats? Am I selecting the region of interest incorrectly? Or is it something else?

CodePudding user response:

sorry for my english,but ur code has a bug.

Mat roi = new Mat(resized, new Rect(0, 0, col, row));

image copied to roi,but this mat not related with resized Mat.so u have to do like this:

Rect roi=new Rect(0,0,width,height);
source.copyto(resized.submat(roi));
  • Related