1、直接新建module进行导入,选择opencv的sdk
导入module模式,选择下载好的sdk,修改module name为OpenCV490。
有报错直接解决报错,没报错直接运行成功。
2、解决错误,同步成功
一般报错是gradle版本问题较多。我的报错如下:
Build file 'D:\work\OpenCVJni\OpenCV480\build.gradle' line: 92A problem occurred evaluating project ':OpenCV480'.> Plugin with id 'kotlin-android' not found.
注释掉
//apply plugin: 'kotlin-android'
重新同步成功。
那就直接build,运行没再报错,就可以直接引用项目进行测试。
3、测试代码
public class MainActivity extends AppCompatActivity {private Bitmap srcBitmap = null;private Bitmap dstBitmap = null;private ImageView imageView = null;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// opencv初始化if (!OpenCVLoader.initDebug()) {// Handle initialization errorreturn;}imageView = findViewById(R.id.imageView);srcBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.image); // 替换为你的图片资源findViewById(R.id.load).setOnClickListener(v -> {imageView.setImageBitmap(srcBitmap);});findViewById(R.id.equalize).setOnClickListener(v -> {// 加载成功后,进行直方图均衡化操作dstBitmap = equalizeHistogram(srcBitmap);imageView.setImageBitmap(dstBitmap);});}private Bitmap equalizeHistogram(Bitmap srcBitmap) {Mat srcMat = new Mat();Mat dstMat = new Mat();Utils.bitmapToMat(srcBitmap, srcMat);// 将图片转换为灰度图Imgproc.cvtColor(srcMat, srcMat, Imgproc.COLOR_BGR2GRAY);// 将源图像的通道转换为单通道List<Mat> channels = new ArrayList<>();Core.split(srcMat, channels);// 对每个通道进行直方图均衡化Imgproc.equalizeHist(channels.get(0), channels.get(0));// 合并通道Core.merge(channels, dstMat);// 将处理后的图像转换回RGB格式Imgproc.cvtColor(dstMat, dstMat, Imgproc.COLOR_GRAY2BGR);Bitmap equalizedBitmap = Bitmap.createBitmap(dstMat.cols(), dstMat.rows(), Bitmap.Config.ARGB_8888);Utils.matToBitmap(dstMat, equalizedBitmap);// 释放资源srcMat.release();dstMat.release();return equalizedBitmap;}
}
xml布局文件
<?xml version="1.0" encoding="utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat 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"android:background="@color/colorWhite"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="80dp"android:orientation="horizontal"><Buttonandroid:id="@+id/load"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="15dp"android:background="@color/colorPrimaryDark"android:text="加载"android:textColor="@color/colorWhite" /><Buttonandroid:id="@+id/equalize"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="15dp"android:background="@color/colorPrimaryDark"android:text="直方图均衡"android:textColor="@color/colorWhite" /></LinearLayout><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/colorWhite"><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:src="@mipmap/image" /></FrameLayout></androidx.appcompat.widget.LinearLayoutCompat>
代码截图
4、运行结果
如果需要编译任意一个opencv版本搞不定的话,可以找我寻求帮助。