gpt4 book ai didi

android - 如何提取图像中的红色/绿色像素

转载 作者:行者123 更新时间:2023-12-02 17:12:49 26 4
gpt4 key购买 nike

我需要在位图/图像中提取红色/绿色像素,但是我不知道该怎么做。
使用OpenCV是一个选择,但我不知道如何使用它,而且它会增加我的应用程序的大小,因此我更喜欢使用一段代码或其他更轻量的库来这样做。 。

更新

这是我当前使用的代码,但是效果不好,我想要更自动化的东西。

public int getDominantColor(Bitmap bitmap,int RGB_SELECTOR, int Rval, int Gval, int Bval) {//RGB_SELECTOR => 0==getting red colors and 1==getting green color
if (null == bitmap) return Color.TRANSPARENT;
//Log.e("func called with",Integer.toString(RGB_SELECTOR));

int redBucket = 0;
int greenBucket = 0;
int blueBucket = 0;
int alphaBucket = 0;

boolean hasAlpha = bitmap.hasAlpha();
int pixelCount = bitmap.getWidth() * bitmap.getHeight();
int[] pixels = new int[pixelCount];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
int true_pixels_count = 0;

for (int y = 0, h = bitmap.getHeight(); y < h; y++)
{
for (int x = 0, w = bitmap.getWidth(); x < w; x++)
{
int color = pixels[x + y * w]; // x + y * width
if(RGB_SELECTOR == 0 && ((color >> 16) & 0xFF)>Rval &&
((color >> 8) & 0xFF)<Gval && ((color & 0xFF))<Bval){//R
redBucket += (color >> 16) & 0xFF; // Color.red
greenBucket += (color >> 8) & 0xFF; // Color.green
blueBucket += (color & 0xFF); // Color.blue
if (hasAlpha) alphaBucket += (color >>> 24); // Color.alpha
true_pixels_count++;
}else if(RGB_SELECTOR == 1 && (((color >> 16) & 0xFF)<Rval &&
((color >> 8) & 0xFF)>Gval && ((color & 0xFF))<Bval) ||
(((color >> 16) & 0xFF)<0x96 &&
((color >> 8) & 0xFF)>0xBE && ((color & 0xFF))<0x14)){//G
redBucket += (color >> 16) & 0xFF; // Color.red
greenBucket += (color >> 8) & 0xFF; // Color.green
blueBucket += (color & 0xFF); // Color.blue
if (hasAlpha) alphaBucket += (color >>> 24); // Color.alpha
true_pixels_count++;

}else if(RGB_SELECTOR == 2 && ((color >> 16) & 0xFF)<Rval &&
((color >> 8) & 0xFF)<Gval && ((color & 0xFF))>Bval) {//B
redBucket += (color >> 16) & 0xFF; // Color.red
greenBucket += (color >> 8) & 0xFF; // Color.green
blueBucket += (color & 0xFF); // Color.blue
if (hasAlpha) alphaBucket += (color >>> 24); // Color.alpha
true_pixels_count++;
}
else {
bitmap.setPixel(x,y,Color.WHITE);
}

}
}
//Log.e("func ended with",Integer.toString(RGB_SELECTOR));
return Color.argb(
(hasAlpha) ? (alphaBucket / true_pixels_count) : 255,
redBucket / true_pixels_count,
greenBucket / true_pixels_count,
blueBucket / true_pixels_count);
}

最佳答案

您可以使用打开一个位图

Bitmap img = BitmapFactory.decodeFile("path/to/img.jpg");

然后,您可以使用
int pixel = img.getPixel(x,y);

并提取特定的RGB值
int red = Color.red(pixel);
int green = Color.green(pixel);

然后,您可以遍历像素,检查您感兴趣的值,当这些值不等于“绿色足够”时,您可以将像素值设置为例如白色(未经测试,仅从内存写入)
for (int row = 0; row < img.getWidth(); row++) {
for (int col = 0; col < img.getHeight(); row++) {
// Use the previous functions to get the
// color you are interested in.
int interestingColor = getMyColor(row, col);

// Check if the color is within certain
// range that is "acceptable". If not,
// make it white.
if(!isInRange(interestingColor))
img.setPixel(row, col, Color.WHITE);
}
}

然后,您可以检查边缘开始的位置,并仅提取图像的那部分。
如果您需要更复杂的内容,则可以重新考虑使用OpenCV。还有例如这个 http://libccv.org/。但是,我以前没有使用过它,所以我不能说它是否完全符合您的要求。

关于android - 如何提取图像中的红色/绿色像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27897722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com