使用 OpenCv 在 Android 上组合多个位图

Combine multiple bitmaps on Android using OpenCv

我想在 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);

生成的图像具有适当的措施但为空。只看到黑色。

有人可以帮我拼图吗?此致!

您不需要使用 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");
    }
}