我正在编写一个方法,尝试在缓冲区图像中查找颜色。目前,该方法的工作原理是取一个屏幕盖,然后扫描图像以寻找特定的颜色。现在我想添加一些RGB公差,因此如果用户试图找到公差为1的颜色(1,3,5),任何颜色-1 R,B或G都将返回true。
我可以通过首先生成一个有效的RGB值数组列表来解决这个问题,然后对于每个像素,我可以遍历数组并检查每个值。问题是对于大图像的高公差,这可能会变得非常慢。
有没有更有效或可能内置的方式可以做到这一点?这是我目前的方法。谢谢!
public static Point findColor(Box searchArea, int color){
System.out.println("Test");
BufferedImage image = generateScreenCap(searchArea);
for (int i = 0; i < image.getWidth(); i++) {
for (int j = 0; j < image.getHeight(); j++) {
if((image.getRGB(i, j)*-1)==color){
return new Point(i + searchArea.x1, j + searchArea.y1);
}
}
}
return new Point(-1, -1);
}
编辑:我使用int RGB值进行所有比较,因此我使用Color.getRGB()代替Color[1,1,1],它返回一个负整数,为了最终用户的简单性,我将其转换为正整数。
如果要具有自定义容差,则需要比较RGB值,而不是“整体”颜色。这是代码,它没有经过测试,但你明白了:
public static Point findColor(Box searchArea, int r, int g, int b, int tolerance) {
// Pre-calc RGB "tolerance" values out of the loop (min is 0 and max is 255)
int minR = Math.max(r - tolerance, 0);
int minG = Math.max(g - tolerance, 0);
int minB = Math.max(b - tolerance, 0);
int maxR = Math.min(r + tolerance, 255);
int maxG = Math.min(g + tolerance, 255);
int maxB = Math.min(b + tolerance, 255);
BufferedImage image = generateScreenCap(searchArea);
for (int i = 0; i < image.getWidth(); i++) {
for (int j = 0; j < image.getHeight(); j++) {
// get single RGB pixel
int color = image.getRGB(i, j);
// get individual RGB values of that pixel
// (could use Java's Color class but this is probably a little faster)
int red = (color >> 16) & 0x000000FF;
int green = (color >> 8) & 0x000000FF;
int blue = (color) & 0x000000FF;
if ( (red >= minR && red <= maxR) &&
(green >= minG && green <= maxG) &&
(blue >= minB && blue <= maxB) )
return new Point(i + searchArea.x1, j + searchArea.y1);
}
}
return new Point(-1, -1);
}
问题内容: 我将签名图像另存为.jpg图片。我使用graphic2d在图像上绘制签名的每个像素(使用签名板获得),它可以正常工作,但我总是得到白色背景。如果我想将签名放在PDF文档上,jpg图像的白色正方形的边框会覆盖PDF的某些单词。 我想要得到的是保存带有透明背景的jpg图像,因此当我将其放置在PDF上时,没有单词被白色图像背景覆盖,只有签名行。 这是保存缓冲图像的代码。它具有白色背景。 我试
我已经用Java编写了一个图像旋转的方法(允许旋转90度、180度和270度),但它似乎没有正常工作。很明显,我做错了什么,但我完全不知道是什么。输出的问题是图像确实是旋转的,但图像中有黑色部分,就像图像不在正确的位置一样。 我的第一次尝试是在不使用作为目标的结果变量的情况下执行此操作,而是执行以下操作: 旋转很好,图像中没有黑色部分,但颜色很奇怪,就像有些颜色改变了,皮肤颜色变红了一样。所以当我
我目前正在尝试制作一个画布,我可以绘制的东西,并使它出现在一个JFrame。 为此,我打算在一个JPanel组件中有一个BufferedImage,paintComponent方法可以从中进行绘制。 理想情况下,我希望能够从给定的JFrame中引用这个缓冲图像,然后使用其Graphics2D向其绘制素材,paintComponent方法可以在使用缓冲图像绘制时显示这些素材。 我这样做是为了避免直接
问题内容: 我有两个从PIL图像转换的Numpy数组(3维uint8)。 我想查找第一张图像是否包含第二张图像,如果是,则找出匹配的第一张图像内左上像素的坐标。 有没有一种方法可以在Numpy中以足够快的方式完成此操作,而不是使用(4!非常慢)纯Python循环? 2D示例: 怎么做这样的事情? 然后将是。 问题答案: 这可以使用SciPy的公司来完成correlate2d,然后用argmax找到
所以我有一个字节数组,代表像素数据(8位灰度)。没有头球。没什么。只是数据。我想用这些数据创建一个缓冲图像。我做的 其中w只是以像素为单位的宽度,h是以像素为单位的高度,数据是字节数组,图像是BufferedImage 这是我的作画方法 然而,我得到了这个图像(真实图像是指纹,大部分是白色像素) 出什么事了?我试着按原样保存数据,然后在Photoshop中查看。数据很好。 [编辑]别管这个问题。我
问题内容: 我正在寻找一种使用python查找图像中最主要的颜色/色调的方法。普通的阴影或最普通的RGB都可以。我看过Python Imaging库,找不到任何与我在他们的手册中所寻找的内容有关的内容,也没有对VTK进行过简短的了解。 但是,我确实找到了可以满足我需要的PHP脚本(在此处需要登录才能下载)。该脚本似乎将图像大小调整为150 * 150,以显示主要颜色。但是,在那之后,我相当失落。我