java - 动态变量和异步

标签 java android opencv asynchronous

我有一个名为grayVal的变量,它告诉我相机所指向的像素的灰度值。显然,当我移动相机时,这个数字会不断变化。我的问题是,当我通过循环异步传递grayVal来测试grayVal通过阈值所需的时间时,无论我将相机指向什么,该数字都不会改变。这是异步的限制吗?我需要采取其他解决方案吗?

public class startTestAsync extends AsyncTask<Integer, Void, Void> {
    double[] timeArray = new double[500]; // set array
    double rating = 0;
    double lagStartTime;
    double lagEndTime;
    double lagTimeResult;
    int testAmount;
    int cnt;
    @Override
    protected Void doInBackground(Integer...grayVal) {
        for (testAmount = 0; testAmount < 500; testAmount++) {
            Log.i("Mat Value", String.valueOf(grayVal[0]));
            lagStartTime = System.nanoTime();
            while (grayVal[0] <= 100) {
                lagEndTime = System.nanoTime();
                lagTimeResult = (lagEndTime - lagStartTime);
                timeArray[testAmount] = lagTimeResult;
         }
         return null;
 }
 protected void onPostExecute(Long result) {
 }

用户界面线程

public void startTest (View view) {
    new startTestAsync().execute(grayVal);
}

@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
    grayMat = inputFrame.gray();
    double[] grayPixel = grayMat.get(100,100);
    grayVal = (int)grayPixel[0];
    Log.i("Mat Value", String.valueOf(grayVal));
    return grayMat;
}

onCameraFrame logcat 中的grayVal

08-25 08:28:56.576  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 50
08-25 08:28:56.639  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 37
08-25 08:28:56.703  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 52
08-25 08:28:56.769  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 53
08-25 08:28:56.835  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 50
08-25 08:28:56.903  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 48
08-25 08:28:56.971  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 47
08-25 08:28:57.038  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 49
08-25 08:28:57.103  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 46
08-25 08:28:57.172  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 46
08-25 08:28:57.240  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 43
08-25 08:28:57.302  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 41
08-25 08:28:57.368  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 44
08-25 08:28:57.436  14645-14989/bluemage.systems.displaylatencytester I/Mat Value﹕ 46

异步 ​​logcat 中的grayVal

08-25 08:32:01.111  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.111  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.111  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.111  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.112  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.112  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.112  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.112  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.114  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.114  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.114  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.114  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.114  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.114  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133
08-25 08:32:01.114  20759-21076/bluemage.systems.displaylatencytester I/Mat Value﹕ 133

logat 中的grayVal

08-25 09:02:49.170    6402-7189/bluemage.systems.displaylatencytester I/Mat Value Async﹕ 23
08-25 09:02:49.170    6402-7189/bluemage.systems.displaylatencytester I/Mat Value Async﹕ 23
08-25 09:02:49.170    6402-7189/bluemage.systems.displaylatencytester I/Mat Value Async﹕ 23
08-25 09:02:49.170    6402-6843/bluemage.systems.displaylatencytester I/Mat Value﹕ 22
08-25 09:02:49.170    6402-7189/bluemage.systems.displaylatencytester I/Mat Value Async﹕ 23
08-25 09:02:49.170    6402-7189/bluemage.systems.displaylatencytester I/Mat Value Async﹕ 23

最佳答案

grayVal(在doInBackground中)和grayVal(在onCameraFrame中)是不同的 因此,一个变量的变化不会反射(reflect)在另一个变量上。

即使没有完整的代码,也可以得出结论,它们是不同的变量,因为它们具有不同的不兼容类型。

grayVal(在doInBackground中)是一个数组,可以从以下代码中推导出来:

        Log.i("Mat Value", String.valueOf(grayVal[0]));
        lagStartTime = System.nanoTime();
        while (grayVal[0] <= 100) {

grayVal(在onCameraFrame中)是原始类型(或其包装类),可以从以下代码中推断出:

grayVal = (int)grayPixel[0];

关于java - 动态变量和异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32203734/

相关文章:

c++ - OPENCV近距离物体检测

java - DatagramSocket 广播行为(Windows 与 Linux)

java - 单击菜单项按钮时打开新 Activity 不起作用

java - JPA cascade = REMOVE 和 Hibernate @OnDelete 一起使用?

java - 在警报对话框中,我想显示所选值

c# - 如何为c#窗口应用程序创建opencv dll

java - Java中是否有静态初始化器的对立工具

Java "contains"无法正常工作

android - 工具栏中的自定义布局未显示

ios - 在 iOS 上使用 openCV 的高动态范围成像产生乱码输出