【问题标题】:Detect Values of RGB from CameraFrame using OpenCV in Android在 Android 中使用 OpenCV 从 CameraFrame 检测 RGB 的值
【发布时间】:2023-03-06 22:07:01
【问题描述】:

我想从 RGB 中检测哪个值最大。我怎么能检测到呢? 我想显示哪种颜色的出现率最高 RGB 值。例如,在图像中,红色的出现频率最高,因此它将颜色显示为 RED,并以百分比形式显示其值。

我已经尝试过获取如下图像的行和列:

   public Mat onCameraFrame(CvCameraViewFrame cvf) {
        mRgba = cvf.rgba();

        int rows = mRgba.rows();
        int cols = mRgba.cols();
       // int ch = mRgba.channels();
        double R=0,G=0,B=0;

        for (int i=0; i<rows; i++)
        {
            for (int j=0; j<cols; j++)
            {
                double[] data = mRgba.get(i, j); //Stores element in an array
                R = data[0];
                G= data[1];
                B = data[2];
            }
        }

        Imgproc.putText(mRgba,"R:"+R + "G:"+G +"B:"+B,new Point(10,52),Core.FONT_HERSHEY_COMPLEX,.7,new Scalar(5,255,255), 2,8,false );
return mRgba;
}

但是因为我在onCameraFrame 中实现了代码,所以需要很多时间并且屏幕滞后。那么我怎样才能在这种方法中快速检测到它,哪种方法是最好的呢?

谢谢。

【问题讨论】:

  • 如果你想命名你应该使用 HSV 颜色空间的颜色
  • 是的,我想要颜色名称和百分比。你能回答我这个问题吗?对你的一个巨大要求。谢谢

标签: android opencv rgb


【解决方案1】:

对于此类任务,您应该使用 AsyncTask,因为它不在 MainThread 上运行,因此您的 UI 不会冻结。

https://developer.android.com/reference/android/os/AsyncTask.html

我认为与您当前的解决方案相比,这会更快。

【讨论】:

    【解决方案2】:

    将图像拆分为其 R、G 和 B 通道,并计算每个 Mat 的总和。

    vector<Mat> channels;
    split(mRgba, channels);
    B = sum(channels[0])[0];
    G = sum(channels[1])[0];
    R = sum(channels[2])[0];
    

    比较 R、G 和 B 的值,以了解帧中出现最多的颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      相关资源
      最近更新 更多