【问题标题】:Android OpenCV color detection in HSV spaceHSV 空间中的 Android OpenCV 颜色检测
【发布时间】:2015-07-12 21:25:06
【问题描述】:

我尝试在 OpenCV 中为 android(实时摄像头视图)编写颜色(绿色)检测代码。先用 RGB 空间还行,但是切换到 HSV 空间就乱了!!!

这是我的代码

    Mat A = src;
    Mat B = dst;
    Imgproc.cvtColor(A, A, Imgproc.COLOR_RGB2HSV,3);
    Size sizeA = A.size();
    for (int i = 0; i < sizeA.height; i++)
        for (int j = 0; j < sizeA.width; j++) {
            double[] data = A.get(i, j);
            if (data[0]>=95 && data[0]<=130 & data[1]>=150 && data[1]<=255 & data[2]<=150 && data[2]<=255){
                 data[0] = 120;
                 data[1] = 255 ;
                 data[2] = 255 ;
            }
            else
                  data[0] = 100;
                  data[1] = 255;
                  data[2] = 255;
              B.put(i, j, data);
        }
    Imgproc.cvtColor(B, B, Imgproc.COLOR_RGB2RGBA, 4);}
}

这段代码有什么问题?而且这个方法运行缓慢。为什么?

(我是 android 和 OpenCV 的新手)

Tnx

【问题讨论】:

    标签: android opencv colors detection


    【解决方案1】:

    您可能应该从 BGR(不是 RGB)转换为 HSV,但这取决于您在此 sn-p 之前的代码

    Imgproc.cvtColor(A, A, Imgproc.COLOR_BGR2HSV,3);
    

    检查您的 if 语句并始终使用 &amp;&amp;(您有时使用 &amp;

    您应该从 HSV 转换为 RGB,然后再转换为 RGBA

    Imgproc.cvtColor(B, B, Imgproc.COLOR_HSV2RGB, 3);}
    Imgproc.cvtColor(B, B, Imgproc.COLOR_RGB2RGBA, 4);}
    

    【讨论】:

    • Tnx,&& 表示两个其他值之间的值,例如 b :a
    • 你将 double 放入 unsigned char
    • 如果是double,使用[0,1]中的值,而不是[0,255]中的值
    • 好的,tnx。但是当我使用它时,我将值标准化,一切都是黑色的。 (值是对的)
    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2023-03-19
    • 2013-01-02
    • 2011-12-19
    • 2023-03-13
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多