【问题标题】:How to specify a color using Scalar class如何使用标量类指定颜色
【发布时间】:2015-05-31 20:28:33
【问题描述】:

我不知道如何在下面发布的方法中使用 Scalar 类指定颜色?

Features2d.drawKeypoints(mKeyPoints_0, mKeyPoints_0, outImage, Scalar color, Features2d.DRAW_RICH_KEYPOINTS);

【问题讨论】:

  • 为什么这个标签是 C++?
  • @MuertoExcobito 因为opencv也有c++ Api
  • OpenCV 也有 python 绑定,但由于您的示例代码在 java(?) 中,因此将其标记为 C++ 可能没有意义。

标签: c++ opencv opencv3.0


【解决方案1】:

您可以使用下面的方法将ARGB转换为标量

public static Scalar argbtoScalar(int r, int g, int b, int a) {
    Scalar s = new Scalar(b, g, r, a);
    return s;
}

a 代表Alpha,它指定transparency

【讨论】:

    【解决方案2】:

    请务必查看 Java API (http://docs.opencv.org/java/3.1.0/org/opencv/core/Scalar.html)

    Scalar colour = new Scalar(B,G,R);
    

    其中 B、G、R 是双精度数,每个颜色通道一个。

    【讨论】:

      【解决方案3】:

      使用Scalar 指定颜色,取决于Mat 类型。尝试在灰度 Mat 上存储/绘制 Red 颜色将失败。

      • 输入CV_8UC1-灰度图像

        //8 bits per pixel and so range of [0:255]. 
        Scalar color = new Scalar( 255 )
        //For type: 16UC1, range of [0:65535]. For 32FC1 range is [0.0f:1.0f] 
        
      • 键入CV_8UC3 - 3 通道彩色图像

        // BLUE: color ordering as BGR
        Scalar color = new Scalar( 255, 0, 0 ) 
        
      • 键入CV_8UC4 - 具有透明度的彩色图像

        //Transparent GREEN: BGRA with alpha range - [0 : 255]
        Scalar color = new Scalar( 0, 255, 0, 128 ) 
        

      在问题中,drawKeyPoints 的第一个参数应该是您的源图像(Mat)而不是关键点。因为MatOfKeyPoint 派生自Mat,所以代码会被编译

      【讨论】:

      • 我是 OpenCV 的新手,我很困惑,因为 color = new Scalar( 255, 0, 0 ) 表示蓝色,当我尝试使用 mMat.setTo(color);,它显示一个红色的垫子,为什么会这样?
      猜你喜欢
      • 2010-12-21
      • 2021-10-30
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      相关资源
      最近更新 更多