AndroidStudio使用opencv(2),程序员开发指南

android:orientation=“horizontal”

android:layout_width=“match_parent”

android:layout_height=“3dp”

android:background=“@color/material_grey_900”>

<LinearLayout

android:orientation=“vertical”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:layout_weight=“1”>

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“灰度化”

android:id=“@+id/textView_togray” />

<ImageView

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:id=“@+id/imageView_after” />

MainActivity.java文件:

package edu.finu.cse.opencv2;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.util.Log;

import android.view.Gravity;

import android.view.View;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import org.opencv.android.BaseLoaderCallback;

import org.opencv.android.LoaderCallbackInterface;

import org.opencv.android.OpenCVLoader;

import org.opencv.android.Utils;

import org.opencv.core.Mat;

import org.opencv.imgproc.Imgproc;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

ImageView img_after;

TextView text_togray;

Bitmap srcBitmap;

Bitmap grayBitmap;

private static boolean flag = true;

//private static boolean isFirst = true;

private static final String TAG = “MainActivity”;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

img_after=(ImageView)findViewById(R.id.imageView_after);

text_togray=(TextView)findViewById(R.id.textView_togray);

text_togray.setOnClickListener(this);

}

//OpenCV库加载并初始化成功后的回调函数

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {

@Override

public void onManagerConnected(int status) {

// TODO Auto-generated method stub

switch (status){

case BaseLoaderCallback.SUCCESS:

Log.i(TAG, “成功加载”);

Toast toast = Toast.makeText(getApplicationContext(),

“成功加载!”, Toast.LENGTH_LONG);

toast.setGravity(Gravity.CENTER, 0, 0);

toast.show();

break;

default:

super.onManagerConnected(status);

Log.i(TAG, “加载失败”);

Toast toast1 = Toast.makeText(getApplicationContext(),

“加载失败!”, Toast.LENGTH_LONG);

toast1.setGravity(Gravity.CENTER, 0, 0);

toast1.show();

break;

}

}

};

public void procSrc2Gray(){

Mat rgbMat = new Mat();

Mat grayMat = new Mat();

srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.duling);

grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565);

Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B.

Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//rgbMat to gray grayMat

Utils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmap

Log.i(TAG, “procSrc2Gray sucess…”);

}

@Override

public void onClick(View v)

{

switch(v.getId())

{

case R.id.textView_togray:

procSrc2Gray();

img_after.setImageBitmap(grayBitmap) ;

break;

}

}

@Override

public void onResume()

{

super.onResume();

if (!OpenCVLoader.initDebug()) {

Log.d(TAG, “Internal OpenCV library not found. Using OpenCV Manager for initialization”);

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0, this, mLoaderCallback);

} else {

Log.d(TAG, “OpenCV library found inside package. Using it!”);

mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);

}

}

}

AndroidManifest.xml文件:

修改项目的Manifest.xml。因为新添加了Activity,这个Activity用到了相机权限等,所以要注册权限。

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android=“http://schemas.android.com/apk/res/android”

package=“edu.finu.cse.opencv2”>

<application

android:allowBackup=“true”

android:icon=“@mipmap/ic_launcher”

android:label=“@string/app_name”

android:roundIcon=“@mipmap/ic_launcher_round”

android:supportsRtl=“true”

android:theme=“@style/AppTheme”>

<activity android:name=“.ImageManipulationsActivity”

android:label=“MyTest”

android:screenOrientation=“landscape”

android:configChanges=“keyboardHidden|orientation”>

<uses-featurexu

android:name=“android.hardware.camera”

android:required=“false” />

<uses-feature

android:name=“android.hardware.camera.autofocus”

android:required=“false” />

<uses-feature

android:name=“android.hardware.camera.front”

android:required=“false” />

<uses-feature

android:name=“android.hardware.camera.front.autofocus”

android:required=“false” />

效果

在这里插入图片描述

三.训练库


1.准备训练数据

训练样本分两类:正样本和负样本。正样本是希望识别的物体的图像。负样本是其他物体的图像(不含有希望识别的物体)。正样本的图像大小应当一致,负样本不做要求,但是必须大于等于正样本图像。

负样本

负样本可以是任意图像,但是这些图像中不能包含待检测的物体。用于抠取负样本的图像文件名被列在一个文件中。这个文件是纯文本文件,文件中每行是一个文件名(包括路径和文件名)。这些图像可以是不同的尺寸,但是图像尺寸应该比训练窗口的尺寸大(比正样本大),因为这些图像将被用于抠取负样本,并将负样本缩小到训练窗口大小。

下面是一个描述文件的例子:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

【Android高级架构视频学习资源】

04888 (备注Android)**
[外链图片转存中…(img-bJ4wWe2P-1711733373994)]

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

[外链图片转存中…(img-sL2gaDIK-1711733373995)]

【Android高级架构视频学习资源】

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值