获取a的每个像素的RGB值的最快方法是BufferedImage
什么?
现在,我使用两个for
循环来获取RGB值,如下面的代码所示,但是获取这些值花费了太长时间,因为嵌套循环为我的图像运行了总共479999次。如果我使用16位图像,那么这个数字会更高!
我需要一种更快的方法来获取像素值。
这是我目前正在尝试使用的代码:
BufferedImage bi=ImageIO.read(new File("C:\\images\\Sunset.jpg"));
int countloop=0;
for (int x = 0; x <bi.getWidth(); x++) {
for (int y = 0; y < bi.getHeight(); y++) {
Color c = new Color(bi.getRGB(x, y));
System.out.println("red=="+c.getRed()+" green=="+c.getGreen()+" blue=="+c.getBlue()+" countloop="+countloop++);
}
}
我不知道这是否有帮助,我还没有测试过,但是您可以通过以下方式获取rgb值:
BufferedImage bi=ImageIO.read(new File("C:\\images\\Sunset.jpg"));
int[] pixel;
for (int y = 0; y < bi.getHeight(); y++) {
for (int x = 0; x < bi.getWidth(); x++) {
pixel = bi.getRaster().getPixel(x, y, new int[3]);
System.out.println(pixel[0] + " - " + pixel[1] + " - " + pixel[2] + " - " + (bi.getWidth() * y + x));
}
}
如您所见,您不必在循环内初始化新的颜色。我还按照onemasse的建议反转了宽度/高度循环,以从我已有的数据中检索计数器。
在我的模拟器中,我试图检查弧线的每个像素。圆弧的中心(x&y)、半径和角(半径、电流角和新角)有固定的坐标,所以我可以用颜色填充它来代表它给用户。但是另外,我需要在覆盖的像素上执行一些操作。我所尝试的是:
实际上我想对每个像素做一些计算,为此我需要显式地访问每个像素。 如有任何帮助或建议,我们将不胜感激。
我只想弄清楚我的概念-访问CV::MAT的所有矩阵元素是否意味着我实际上访问了图像的所有像素值(灰度-1通道,颜色-3通道)?假设我的代码打印灰度矩阵的值(加载1通道图像,类型为CV_32FC1),如下所示,那么这意味着我只访问cv::mat的成员,还是我也访问图像的像素值(具有1通道灰度,类型为CV_32FC1)? 我对使用OpenCV进行图像处理还是一个新手,我想澄清一下我的想法。如果我错了,
我想获得图像中的所有像素,像素值最接近图像中的某些像素。例如,我有一个图像,它有海洋(深蓝色),晴空(浅蓝色),海滩和房屋的观点。我想找到所有最接近深蓝的像素,以便将它归类为水。我的问题是天空也被归类为水。有人建议使用K近邻算法,但网上很少有使用旧C样式的例子。谁能给我提供使用OpenCv C++的K-NN的例子吗?
当你使用画布时,你可以检索读取画布上的像素数据,或者操作画布上的像素。读取图像数据使用createImageData(sw,sh)或者getImageData(sx,sy,sw,sh)。这两个函数都会返回一个包含宽度(width),高度(height)和数据(data)的图像数据(ImageData)对象。图像数据包含了一维数组像素数据,使用RGBA格式进行检索。每个数据的数据范围在0到255之间
问题内容: 我正在开发Midlet应用程序。我发现自己经常需要缩放图像。这已经成为一个问题,因为某些电话速度很慢,缩放时间太长。 目前,我正在使用Image.createRGBImage(int,int,int,boolean)缩放图像。 我想知道你们中是否有人知道一种非常有效和快速的缩放图像的方法。 注意: 这是一个Midlet应用程序,因此仅JavaME可用,这意味着我无权访问完整Java版本