gpt4 book ai didi

java - 在 Android 上使用自适应阈值

转载 作者:行者123 更新时间:2023-12-01 18:16:08 25 4
gpt4 key购买 nike

当我单击按钮 (onclick) 时,我想在图像上使用自适应阈值,但不确定为什么总是出现错误

这是我的主要 Activity

    public void convertToGray(View v) {
Mat Rgba = new Mat();
Mat grayMat = new Mat();
Mat dst = new Mat();

BitmapFactory.Options o = new BitmapFactory.Options();
o.inDither = false;
o.inSampleSize = 4;

int width = imageBitmap.getWidth();
int height = imageBitmap.getHeight();

grayBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);

//Bitmap to MAT

Utils.bitmapToMat(imageBitmap, Rgba);

Imgproc.cvtColor(Rgba, grayMat, Imgproc.COLOR_RGB2GRAY);

conBitmap = Bitmap.createBitmap(width, height, CvType.CV_8UC1);

//Bitmap to MAT

Utils.bitmapToMat(imageBitmap, Rgba);


Imgproc.adaptiveThreshold(Rgba, dst, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 11, 2);

Utils.matToBitmap(dst, conBitmap);

imageView.setImageBitmap(conBitmap);


}

这是错误

2020-02-23 22:16:18.631 30200-30200/com.example.myapplication E/cv::error(): OpenCV(3.4.1) Error: Assertion failed (src.type() == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3))) in void cv::adaptiveThreshold(cv::InputArray, cv::OutputArray, double, int, int, int, double), file /build/master_pack-android/opencv/modules/imgproc/src/thresh.cpp, line 1524
2020-02-23 22:16:18.633 30200-30200/com.example.myapplication E/org.opencv.imgproc: imgproc::adaptiveThreshold_10() caught cv::Exception: OpenCV(3.4.1) /build/master_pack-android/opencv/modules/imgproc/src/thresh.cpp:1524: error: (-215) src.type() == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3)) in function void cv::adaptiveThreshold(cv::InputArray, cv::OutputArray, double, int, int, int, double)
2020-02-23 22:16:18.633 30200-30200/com.example.myapplication D/AndroidRuntime: Shutting down VM
2020-02-23 22:16:18.634 30200-30200/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 30200
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:402)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397)
at android.view.View.performClick(View.java:7125) 
at android.view.View.performClickInternal(View.java:7102) 
at android.view.View.access$3500(View.java:801) 
at android.view.View$PerformClick.run(View.java:27336) 
at android.os.Handler.handleCallback(Handler.java:883) 
at android.os.Handler.dispatchMessage(Handler.java:100) 
at android.os.Looper.loop(Looper.java:214) 
at android.app.ActivityThread.main(ActivityThread.java:7356) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
Caused by: CvException [org.opencv.core.CvException: cv::Exception: OpenCV(3.4.1) /build/master_pack-android/opencv/modules/imgproc/src/thresh.cpp:1524: error: (-215) src.type() == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3)) in function void cv::adaptiveThreshold(cv::InputArray, cv::OutputArray, double, int, int, int, double)
]
at org.opencv.imgproc.Imgproc.adaptiveThreshold_0(Native Method)
at org.opencv.imgproc.Imgproc.adaptiveThreshold(Imgproc.java:1459)
at com.example.myapplication.MainActivity.convertToGray(MainActivity.java:124)
... 13 more

这是我的activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.myapplication.MainActivity">


<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Gallery"
android:onClick="openGallery"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"/>

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:onClick="convertToGray"
android:layout_marginStart="45dp"
android:layout_toEndOf="@+id/button"
android:text="Grayscale" />

<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="605dp"
app:srcCompat="@mipmap/ic_launcher" />
</RelativeLayout>

最佳答案

请查看OpenCV的手册: adaptiveThreshold

adaptiveThreshold 似乎只接受单 channel 图像,但是,您似乎正在输入彩色图像。将输入图像转换为灰度图像或分别对每个 channel 应用阈值。

祝你好运

安德烈亚斯

关于java - 在 Android 上使用自适应阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60363893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com