【问题标题】:Color detection in a static image - OpenCV Android静态图像中的颜色检测 - OpenCV Android
【发布时间】:2018-03-14 21:28:08
【问题描述】:

我有一个图像,有四个正方形红色、绿色、蓝色和黄色。我需要获取每个正方形的 rgb 值。我能够获得整个图像的 rgb,但我想要它用于特定部分。

  • 我要获取的图像将来自相机并存储到 SDCard 上

【问题讨论】:

  • 你试过裁剪特定区域并检测颜色吗?
  • 你需要在图像中显示区域并显示它们的 rgb 值,对吗?
  • @IsmetAlkan 我只想专门获取所有四个部分 rgb,而不是*将其显示在任何地方
  • @Torcellite 未裁剪,但我尝试提供仅包含 R、仅 G 和仅 B 的图像......我为它们得到了正确的 rgbs.. 基本上我得到了平均 rgb 颜色图片。
  • @aditya 方块是否总是在相同的位置?我的意思是方块的颜色可以改变,但它们各自的位置不会改变,如果是这样,你最好的选择是裁剪和检测。

标签: android opencv


【解决方案1】:

我不知道我是否完全理解你,但它来了。

您需要创建 BufferedImage 对象来获取 RGB 值:

File f = new File(yourFilePath);
BufferedImage img = ImageIO.read(f);

您可以从那时起从图像中获取 RGB 颜色值。你有 4 个方格;要检查它们的 RGB 值,您可以检查角像素的 RGB 值:

Color leftTop = new Color(img.getRGB(0, 0));
Color rightTop = new Color(img.getRGB(img.getWidth - 1, 0));
Color leftBottom = new Color(img.getRGB(0, img.getHeight - 1));
Color rightBottom = new Color(img.getRGB(img.getWidth - 1, img.getHeight - 1));

之后就很容易分别得到红色、绿色和蓝色的值了:

int red = leftTop.getRed();
int green = leftTop.getGreen();
int blue = leftTop.getBlue();

编辑: 真的很抱歉,我没有看到它是针对Android的。正如你所说,Android 没有 ImageIO 类。要在 Android 中完成任务,首先要初始化图像:

Bitmap img = BitmapFactory.decodeFile(yourFilePath);

从那时起,操作几乎相同:

int leftTop = img.getPixel(0, 0);
...

int red = Color.red(pixel);
int blue = Color.blue(pixel);
int green = Color.green(pixel);

【讨论】:

  • 感谢您的支持...我正在尝试这个..我会尽快回复您..
  • Android SDK 不支持 BufferedImage 和 ImageIO...现在我正在寻找 Bitmap 类是否可以为我执行此操作。
  • 你完全改变了我的方法......我得到了顶角和底角像素 rgb...让我们看看事情是否会以这种方式锻炼.. M 现在不接受答案,但肯定是为你 +1.. 感谢您的帮助伙伴..
【解决方案2】:

使用this 裁剪图像。

现在要检测图像的颜色,从正方形中取出一个像素并使用this 检测它的颜色。

找到 RGB 值后,使用一个简单的条件语句来查看正方形是红蓝还是绿。

【讨论】:

  • 感谢您的帮助...但我不必全部这样做...再次感谢。 +1 为您提供帮助。
  • 查看我的答案...我在哪里得到四个示例角像素及其 rgbs.. :)
【解决方案3】:

我是这样理解的

int topLeftIndex = squareImage.getPixel(0, 0);
int R1 = (topLeftIndex >> 16) & 0xff;
int G1 = (topLeftIndex >> 8) & 0xff;
int B1  = topLeftIndex  & 0xff;

一样
int bottomLeftIndex=squareImage.getPixel(0, picHeight - 1);
int topRightIndex=squareImage.getPixel(picWidth -1 , 0);
int bottomRightIndex=squareImage.getPixel(picWidth -1, picHieght - 1);

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多