我正在尝试将给定图像像素RGB值加载到2d数组中,以便以后可以对其进行编辑。 例如,如果我有一个500,350的像素,那么它的像素值将看起来像R 250 G 245 B 210
我正在尝试将其放入二维数组中,看起来像这样
A 2-dimensional array of pixels:
[
[(255,45,19), (44,44,92), (80,1,9), ...],
[(51,2,231), (61,149,14), (234,235,211), ...],
[(51,2,231), (61,149,14), (199,102,202)...],
[(51,2,231), (61,149,14), (1,5,42)...],
...
]
这是使用Java的OpenCV库我已经尝试做类似的事情,
int[][] pixelArray = int[image.rows()][image.cols()];
for (int i = 0;i<image.rows();i++){
for (int j = 0; j<image.cols();j++){
double[] pixelValues = image.get(i,j);
pixelArray[i][j] = pixelValues;
}
}
我在这里的想法是将一个数组添加为2d数组的元素,但是我认为我的逻辑是有缺陷的,因为这样做的效果不是很好
public static void main(String[] args) {
//Instantiating ImageCodecs Class
Imgcodecs imageCodecs = new Imgcodecs();
//Loads Image
Mat image = imageCodecs.imread(imageInput);
System.out.println("Image Loaded");
System.out.println("Image size: " + image.rows() + " Pixel rows " + image.cols() + " Pixel columns " );
//Gets pixel RGB values
double[] rgb = image.get(0,0);
System.out.println("red: " + rgb[0] + " Green: " + rgb[1] + " Blue: " + rgb[2]);
// Attempt to get all pixels in 2D array
int[][] pixelArray = int[image.rows()][image.cols()];
for (int i = 0;i<image.rows();i++){
for (int j = 0; j<image.cols();j++){
double[] pixelValues = image.get(i,j);
pixelArray[i][j] = pixelValues; //TRYING TO FILL 2D ARRAY WITH REGULAR ARRAY
}
}
...
我应该能够打印整个2d数组的RGB值
答案 0 :(得分:0)
我将创建一个Pixel
类,然后有一个Pixel
对象的二维数组。如果您覆盖toString
方法,则可以控制在打印该类时该类的显示方式。
public class Pixel {
private int red;
private int green;
private int blue;
public Pixel(int red, int green, int blue) {
this.red = red;
this.green = green;
this.blue = blue;
}
@Override
public String toString() {
return "R: " + red +
"G: " + green +
"B: " + blue;
}
}
要打印出阵列,您可以执行以下操作:
System.out.println(Arrays.deepToString(array));
答案 1 :(得分:0)
为什么不使用Color类并使用Color []颜色数组?它具有获取RGB分量并将int转换为Color并再次返回的方法吗?
List<Color> colors = new ArrayList<>();
color.add(new Color(255,45,19));
color.add(new Color(44,44,92));
或
Color[] colors = new Color[10];
colors[0] = new Color(255,45,19);
colors[1] = new Color(44,44,92);
最好在二维数组中存储,就像这样。
int NROWS = 200;
int NCOLS = 200;
Color[][] colors = new Color[NROWS][];
for (int r = 0; r < ROWS; r++) {
Color[] row = new Color[NCOLS];
for (int c = 0; c < NCOLS; c++) {
//each element in a row is part of a column
row[c] = new Color(......);
}
colors[r] = row;
}
无论您是否将某些其他数据结构存储为颜色,都适用相同的想法。您可能还想研究使用raster
来存储像素。