繁体   English   中英

将C ++ OpenCV代码更改为Android代码

[英]Changing c++ opencv code to android code

嗨,我想更改图像的透视图并将其与其他图像合并。 我发现用c ++用opencv库编写的示例,我试图将其转换为android,但是我发现没有错误,没有找到长org.opencv.highgui的实现。 这是我的代码:

public class TransformationImage {
private MatOfPoint2f pointsOfSuperimposedImage;
private MatOfPoint2f pointsOfMainImage;
private Mat imageMain;
private Mat imagelogo;

public TransformationImage(String imageMainPath, String imageLogoPath) {
    this.imagelogo = Highgui.imread(imageLogoPath);
    this.imageMain = Highgui.imread(imageMainPath);
    pointsOfMainImage = new MatOfPoint2f();
    pointsOfSuperimposedImage = new MatOfPoint2f();
}

public Bitmap transformTwoImages(){
    Mat finalTransformedImage;
    Bitmap bitmap = Bitmap.createBitmap(552, 256, Bitmap.Config.ARGB_4444);
    setMainImageVectors();
    setAppliedImagePosition();
    setWarpPerspectiveOfTwoImages();
    finalTransformedImage = showFinal(pointsOfMainImage, pointsOfMainImage);
    Utils.matToBitmap(finalTransformedImage, bitmap);
    return bitmap;
}

private Mat showFinal(Mat firstImage, Mat secondImage){
    Mat gray = new Mat();
    Mat gray_inv = new Mat();
    Mat src1final = new Mat();
    Mat src2final = new Mat();
    cvtColor(secondImage, gray, Imgproc.COLOR_BGR2GRAY);
    threshold(gray, gray, 0, 255, 0);
    bitwise_not(gray, gray_inv);
    firstImage.copyTo(src2final, gray_inv);
    secondImage.copyTo(src1final, gray);
    addWeighted(src1final, 0, src2final, 0, 0, src1final);
    return src1final;
}
private void setWarpPerspectiveOfTwoImages(){
    Imgproc.warpPerspective(imagelogo, imageMain, Calib3d.findHomography(pointsOfSuperimposedImage, pointsOfMainImage), imageMain.size());
}
private void setMainImageVectors(){
    List<Point> src_pnt = new ArrayList<>();
    Point p0 = new Point(0, 0);
    src_pnt.add(p0);
    Point p1 = new Point(552, 0);
    src_pnt.add(p1);
    Point p2 = new Point(0, 256);
    src_pnt.add(p2);
    Point p3 = new Point(552, 256);
    src_pnt.add(p3);
    pointsOfMainImage.push_back(Converters.vector_Point2f_to_Mat(src_pnt));
}
private void setAppliedImagePosition(){
    List<Point> src_pnt = new ArrayList<>();
    Point p0 = new Point(0, 0);
    src_pnt.add(p0);
    Point p1 = new Point(50, 0);
    src_pnt.add(p1);
    Point p2 = new Point(50, 20);
    src_pnt.add(p2);
    Point p3 = new Point(20, 0);
    src_pnt.add(p3);
    pointsOfSuperimposedImage.push_back(Converters.vector_Point2f_to_Mat(src_pnt));
}
}

这是c ++中的代码示例http://ramsrigoutham.com/2014/06/14/perspective-projection-with-homography-opencv/#comment-8114

我通过导入模块将opencv库导入到android studio中的项目中。

我认为您没有遵循正确的方法。 您不能直接将c ++代码转换为java。 为了在Java代码中使用openCV库,他们提供了用于Android开发的Java包装器类。 并且您必须下载并导入以下库-javacpp.jar -javacv.jar -javacv-android-arm.jar

有关更多详细步骤,请参阅博客

这可能会帮助您。 如果您需要更多帮助,请随时询问。

您可以参考以下链接,这可能会对您有所帮助。

链接1 链接2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM