主要内容

增强的颜色和定制代码替换

这个例子展示了如何使用FromApp从模型块®支持包为An万博1manbetx万博1manbetxdroid™设备接收数据并在Android应用程序添加一个触摸界面。这个例子演示了一个工作流定制生成的仿真软件使用Android项目万博1manbetxAndroid工作室

介绍

颜色检测算法识别像素在图像匹配指定的颜色或颜色范围。原始图像中检测到的像素被不同的图像的像素所取代。这个过程被称为颜色替换或色度键。

这个模型在内部使用相同的子系统颜色检测颜色替换的例子。

在本例中,您将选择的参考颜色检测从选定的位置在你的Android设备的屏幕。您将配置模型和开发用户界面通过更新代码的触摸位置和相应的像素信息从一个视频帧。

这个例子展示了:

  • 如何配置一个仿真软件模型,用于接收数据万博1manbetx的应用程序。

  • 的一个示例生成的Android应用程序导入安卓工作室。

  • 如何在应用程序中添加自定义代码开发高级特性。

先决条件

所需的硬件

  • Android设备,配置使用androidhwsetup

  • USB电缆连接主机的设备

任务1 -建立模型仿真软件生成万博1manbetx和导入项目

在这个任务中,您将构建一个预先配置的模型。你会在Android中导入生成项目工作室为进一步发展。

1。打开颜色替换与联系模型。

2。将模板映像加载到矩阵RGB_background通过执行以下命令在MATLAB命令窗口:

RGB_background = imread (“image_640_480.jpg”);

3所示。在模型中,双击FromApp块。注意,字段方法名称pickColorFromDeviceScreen。在接下来的任务你会实现这个方法。

4所示。将配置Android设备连接到您的主机电脑。如果你没有以前你的设备配置,运行androidhwsetup从MATLAB命令提示符。

5。建模将来发布的选项卡,选择模型设置

6。选择硬件实现面板和设置硬件板Android设备

7所示。硬件仿真软件模型的选项卡,万博1manbetx在模式部分中,选择机上运行然后点击构建、部署和启动

8。找到生成的Android项目文件夹androidcolorreplacementcustom_ert_rtw在当前工作目录中。

9。在Android工作室,导入您的项目的androidcolorreplacementcustom子文件夹。详细步骤请参考导入项目Google Android工作室

任务2 -基本应用程序运行

在这个任务您将修改生成的应用程序代码运行一个简单的替代检测一个固定的颜色。

1。在你的Android项目中,打开androidcolorreplacementcustom.java主要文件位于androidcolorreplacementcustom > src > > java > com > > androidcolorreplacementcustom示例

2。在androidcolorreplacementcustom类中,添加以下的实现pickColorFromDeviceScreen方法。该方法返回固定颜色的RGB组件作为输出FromApp在仿真软件模型。万博1manbetx注意,可以添加一个方法声明类内的任何地方,只要它不重叠与其他声明。

公共int []pickColorFromDeviceScreen (){int [] rgb_send ={211, 27日10};/ * R, G, B红色* /的组件返回rgb_send;/ /参考颜色检测}

3所示。在Android Studio IDE中,单击运行按钮来构建应用程序更新的设备。

4所示。在选择设备窗格中,选择您的连接设备。按OK选中的设备上部署和运行应用程序。

5。出现颜色更换相机应用,检测场景中红颜色。

任务3 -更新代码使用触摸的位置

在这个任务中,您将更新代码的应用程序让屏幕触摸位置和选择颜色在这个位置的引用。您将添加额外的代码来计算视频帧的像素位置和颜色组件检测。你将运行更新应用程序使用触摸界面看到结果。

1。androidcolorreplacementcustom顶部部分。java文件中,添加以下代码行后其他导入声明。

进口android.view.MotionEvent;进口android.view.Window;进口android.util.DisplayMetrics;进口android.graphics.Rect;进口android.view.View;

2。androidcolorreplacementcustom类的实现类的身体开始,添加以下代码声明成员变量在其他成员变量声明。

intx=1;/ / X的协调感动了位置inty=1;/ / Y的协调感动了位置int[]rgb_send=int [3];/ /存储RGB参考颜色去年感动了位置DisplayMetrics指标;

3所示。添加以下代码的末尾registerCamera方法出现在androidcolorreplacementcustom类,碰它位置值为x, y成员变量。

mCameraView。setOnTouchListener(新View.OnTouchListener公共boolean () {ondraw(视图v MotionEvent事件){x = ((int) event.getX ());y = ((int) event.getY ());返回错误;}});

4所示。在同一个类中,添加以下方法来找到应用程序的视图布局中的补偿。这些补偿将用于建立对应位置和图像中像素的位置之间的联系。

/ * *得到高度状态酒吧布局设备。* /公共intgetStatusBarHeight (){矩形r=矩形();窗口w=getWindow ();w.getDecorView () .getWindowVisibleDisplayFrame (r);返回r.top;}/ * *得到高度标题酒吧应用程序标题的名字* /公共intgetTitleBarHeight (){intviewTop=getWindow () .findViewById (Window.ID_ANDROID_CONTENT) .getTop ();返回(viewTop getStatusBarHeight ());}

5。取代现有的onCameraFrame方法实施后

公共onCameraFrame (CvCameraViewFrame inputFrame){mCameraBufInput = inputFrame.rgba ();指标= new DisplayMetrics ();.getDefaultDisplay getWindowManager () () .getMetrics(指标);如果(x, y = 1 & & ! = 1){/ / / /最新的触摸位置如果真的,触摸检测到如果((y < metrics.heightPixels) & & (x < metrics.widthPixels)) {int h_off rel_h;int w_off rel_w;/ * * *计算偏移和缩放参数应用程序窗口原始视频框架* /getStatusBarHeight h_off = getTitleBarHeight () + ();rel_h =(指标。heightPixels - h_off);rel_w = ((mCameraBufInput.width () * rel_h) / mCameraBufInput.height ());w_off =(指标。widthPixels - rel_w) / 2; /** Calculating correspondence触摸位置*的像素坐标视频框架* /int诗句=((y - h_off) * mCameraBufInput.height ())/ rel_h;intposX=((x - w_off) * mCameraBufInput.width ())/ rel_w;/ *得到像素信息计算抵消图像* /[]rgb=mCameraBufInput。get(诗句,posX);如果(rgb ! = null) {rgb_send [0] = (int) rgb [0];rgb_send [1] = (int) rgb [1];rgb_send [2] = (int) rgb [2];}}x = 1;/ *重置x, y下一个触摸事件* /y = 1;}返回mCameraBufOutput;}

6。取代pickColorFromDeviceScreen方法用以下实现返回选定的参考颜色的RGB分量作为输出FromApp在仿真软件模型。万博1manbetx

公共int []pickColorFromDeviceScreen (){/ * * /参考颜色从视频帧返回rgb_send;}

7所示。在Android Studio IDE中,单击运行按钮来构建应用程序更新的设备。

8。在选择设备窗格中,选择您的连接设备。按OK选中的设备上部署和运行应用程序。

9。一旦应用程序出现在设备更新,触摸在屏幕上的图像不同区域观察颜色替换。

下面的屏幕显示了橙色的替换与背景墙的形象。

下面的屏幕显示替换白色的背景图像。

其他的事情努力

  • 修改接收参考颜色的数据万博1manbetx仿真软件模型FromApp块。使用ToApp块从仿真软件支持包为A万博1manbet万博1manbetxxndroid®设备接收的数据定制。在应用程序中,实现方法和添加定制代码打印日志中的接收的数据。