在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android opencv 图像识别 源码下载

android opencv 图像识别 源码下载

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:1.20M
  • 下载次数:88
  • 浏览次数:1350
  • 发布时间:2017-03-24
  • 实例类别:Android平台开发
  • 发 布 人:dongpuxiao
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 图像识别 图像 识别 opencv

实例介绍

【实例简介】
【实例截图】

【核心代码】

package com.example.opencvdemo;

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity implements CvCameraViewListener2 {

	/**
	 * 展示原图和对比图
	 */
	private ImageView iv1, iv2;

	/**
	 * 原图和对比图
	 */
	private Bitmap bmp1, bmp2;

	/**
	 * 拍摄原图、拍摄对比图、对比、自动对比
	 */
	private Button pz1, pz2, db, zddb;

	/**
	 * 显示相似度(完全相同值为1)
	 */
	private TextView tv;

	/**
	 * CV相机
	 */
	private CameraBridgeViewBase mCVCamera;

	/**
	 * 加载OpenCV的回调
	 */
	private BaseLoaderCallback mLoaderCallback;

	/**
	 * 拍照状态 0:不拍照 ,1:拍原图,2:拍对比图,3:拍对比图并自动对比
	 */
	private int isTakePhoto = 0;

	/**
	 * 用于定时执行图片对比
	 */
	private Handler handler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 初始化
		init();
	}

	@SuppressLint("HandlerLeak")
	private void init() {
		// 初始化
		iv1 = (ImageView) findViewById(R.id.iv1);
		iv2 = (ImageView) findViewById(R.id.iv2);
		pz1 = (Button) findViewById(R.id.pz1);
		pz2 = (Button) findViewById(R.id.pz2);
		db = (Button) findViewById(R.id.db);
		zddb = (Button) findViewById(R.id.zddb);
		tv = (TextView) findViewById(R.id.tv);

		handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				// 自动拍照并对比
				isTakePhoto = 3;
			}
		};

		OnClickListener btnOnClick = new OnClickListener() {
			@Override
			public void onClick(View v) {
				switch (v.getId()) {
				case R.id.pz1:
					// 拍原图
					isTakePhoto = 1;
					break;
				case R.id.pz2:
					// 拍对比图
					isTakePhoto = 2;
					break;
				case R.id.db:
					hist();
					break;
				case R.id.zddb:
					// 拍对比图并自动对比
					isTakePhoto = 3;
					break;
				}
			}
		};
		// 设置点击事件
		pz1.setOnClickListener(btnOnClick);
		pz2.setOnClickListener(btnOnClick);
		db.setOnClickListener(btnOnClick);
		zddb.setOnClickListener(btnOnClick);

		// 初始化CV相机
		mCVCamera = (CameraBridgeViewBase) findViewById(R.id.cv);
		mCVCamera.setVisibility(CameraBridgeViewBase.VISIBLE);
		// 设置相机监听
		mCVCamera.setCvCameraViewListener(this);

		// 连接到OpenCV的回调
		mLoaderCallback = new BaseLoaderCallback(this) {
			@Override
			public void onManagerConnected(int status) {
				switch (status) {
				case LoaderCallbackInterface.SUCCESS:
					mCVCamera.enableView();
					break;
				default:
					break;
				}
			}
		};
	}

	private void hist() {
		// 对比算法会耗时,导致页面卡顿,所以新开线程进行对比
		new Thread(new Runnable() {
			@Override
			public void run() {
				// 对比
				final double target = HistUtils.comPareHist(bmp1, bmp2);
				MainActivity.this.runOnUiThread(new Runnable() {
					@Override
					public void run() {
						// 将相似度显示在左上角
						tv.setText("相似度:"   target);
					}
				});
			}
		}).start();
	}

	@Override
	public void onCameraViewStarted(int width, int height) {
	}

	@Override
	public void onCameraViewStopped() {
	}

	@Override
	public Mat onCameraFrame(CvCameraViewFrame inputFrame) {// 相机拍摄每一帧的图像,都在此处理
		// 获取相机中的图像
		final Mat rgba = inputFrame.rgba();
		if (isTakePhoto != 0) {

			// 记录拍照状态
			final int who = isTakePhoto;
			// 重置拍照状态
			isTakePhoto = 0;

			// 要把Mat对象转换成Bitmap对象,需要创建一个宽高相同的Bitmap对象昨晚参数
			final Bitmap bmp = Bitmap.createBitmap(rgba.cols(), rgba.rows(),
					Config.RGB_565);

			// 记录要展示图片的ImageView
			ImageView iv = null;
			// Mat >>> Bitmap
			Utils.matToBitmap(rgba, bmp);

			if (who == 1) {
				// 展示原图
				iv = iv1;
				bmp1 = bmp;
			} else if (who == 2) {
				// 展示对比图
				iv = iv2;
				bmp2 = bmp;
			} else {
				// 展示对比图
				iv = iv2;
				bmp2 = bmp;
				// 对比
				hist();
				// 每隔0.5秒对比一次
				handler.sendEmptyMessageDelayed(1, 500);
			}
			// 记录要展示图片的ImageView
			final ImageView image = iv;
			runOnUiThread(new Runnable() {
				@Override
				public void run() {
					// 展示拍到的图片
					image.setImageBitmap(bmp);
					if (bmp1 != null) {
						// 如果原图已经拍好了,那么可以进行自动对比,将自动对比按钮设置为可用
						zddb.setEnabled(true);
						if (bmp2 != null) {
							// 如果原图和对比图都已经拍好了,那么可以进行对比,将对比按钮设置为可用
							db.setEnabled(true);
						}
					}
				}
			});
		}
		// 将每一帧的图像展示在界面上
		return inputFrame.rgba();
	}

	@Override
	protected void onResume() {
		// 界面加载完成的时候向OpenCV的连接回调发送连接成功的信号
		if (OpenCVLoader.initDebug()) {
			mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
		}
		super.onResume();
	}

	@Override
	protected void onPause() {
		super.onPause();
		// 销毁OpenCV相机
		if (mCVCamera != null)
			mCVCamera.disableView();
	}

}


实例下载地址

android opencv 图像识别 源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警