我想在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);
生成的图像具有适当的度量但是为空。只看到黑色。
有人可以帮我合并图片吗?最好的问候!
答案 0 :(得分: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");
}
}