静态图像中的颜色检测 - OpenCV Android

时间:2013-05-20 05:22:10

标签: android opencv

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

  • 我将获得的图像将来自相机并存储在SDCard

3 个答案:

答案 0 :(得分:2)

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

您需要创建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);

答案 1 :(得分:1)

使用this裁剪图像。

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

找到RGB值后,使用简单的条件语句查看方块是红蓝色还是绿色。

答案 2 :(得分:0)

我这样做了

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);