【问题标题】:Combine multiple bitmaps on Android using OpenCv使用 OpenCv 在 Android 上合并多个位图
【发布时间】:2015-11-12 01:10:11
【问题描述】:

我想在 android 上使用 openCV 将多个图像合并为一个。这个想法是将它们垂直组合,一个接一个。 我已经尝试过了,但我得到了黑色图像。

   int totalHeigth = 0;
    List<Bitmap> bmps = getListCacheImages();
    Mat tmp = new Mat(allitemsheight,listView.getMeasuredWidth(), CvType.CV_8UC1);

    for (int i = 0; i < bmps.size(); i++) {
        Mat targetImage = new Mat();
        Utils.bitmapToMat(bmps.get(i), targetImage);
        //targetImage.row(0).copyTo(tmp.row(totalHeigth));
        targetImage.rowRange(0, bmps.get(i).getHeight()).colRange(0,width).copyTo(tmp.rowRange(totalHeigth, totalHeigth + bmps.get(i).getHeight()).colRange(0,width));
        totalHeigth += bmps.get(i).getHeight();
    }
    Imgcodecs.imwrite( mFolder.getPath() + "/" + filename + ".png",tmp);

生成的图像具有适当的度量,但为空。只看到黑色。

有人可以帮我合并图像吗?最好的问候!

【问题讨论】:

    标签: java android opencv bitmap mat


    【解决方案1】:

    您不需要使用 colRange()rowRange() 方法,Opencv 有 hconcat() 水平对齐矩阵(图像 Mat())和 vconcat() 垂直对齐矩阵,请记住您连接的维度必须相等。因此,在给定的场景中,您可以使用以下方法:

    Mat finalMat = new Mat();
    Mat tempMat = new Mat();
    Utils.bitmapToMat(bmps.get(0), finalMat);
    for (int i = 1; i < bmps.size(); i++) {
        Utils.bitmapToMat(bmps.get(i), tempMat);
        if (tempMat.cols() == finalMat.cols()){
            Core.vconcat(finalMat, tempMat, finalMat);
        }
        else{
        Log.d("debug", "The matrices don't have equal dimensions");
        }
    }
    

    【讨论】:

    • 您好!感谢您的代码,我让它工作。但是 Core.vconcat 方法是错误的。第一个参数必须是一个 Mat 列表。我是这样优化代码的:List&lt;Mat&gt; mats = getListCacheImages(); Mat tmp = new Mat(allitemsheight,width, CvType.CV_8U); for (int i = 1; i &lt; mats.size(); i++) { if (mats.get(i).cols() == tmp.cols()){ Core.vconcat(mats, tmp); } else{ Log.d("debug", "The matrices don't have equal dimensions"); } } 能改就更好了
    猜你喜欢
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多