Java 跳过像素问题
我正在写一个程序,将采取二维码图像和识别黑/白像素,并保持在一个数组中。但我的问题是;我有294x294像素的图像和一个固定大小21x21的矩阵。对我来说,一个正方形模块是294/21=4.0像素。如何按4.0像素到4.0像素搜索像素?这是我的密码:Java 跳过像素问题,java,Java,我正在写一个程序,将采取二维码图像和识别黑/白像素,并保持在一个数组中。但我的问题是;我有294x294像素的图像和一个固定大小21x21的矩阵。对我来说,一个正方形模块是294/21=4.0像素。如何按4.0像素到4.0像素搜索像素?这是我的密码: public static void printAllARGBDetails(BufferedImage image) { int width = image.getWidth(); int height = ima
public static void printAllARGBDetails(BufferedImage image) {
int width = image.getWidth();
int height = image.getHeight();
System.out.println("Image Dimension: Height-" + height + ", Width-"
+ width);
System.out.println("Total Pixels: " + (height * width));
int pixels[][]=new int[21][21];
int pixel=width/21;
System.out.println("Pixel=" +pixel);
for (int i = 20; i>=0 ; i--) {
for (int j = 20; j>=0 ; j--) {
if(image.getRGB(i, j)==-1)
{
pixels[i][j]=0;
}
else
{
pixels[i][j]=1;
}
}
}
}
`下面编辑的代码应该可以工作,但它只测试每个元素中16个像素中的1个
for (int i = 0; i<20 ; i++) {
for (int j = 0; j<20 ; j++) {
if(image.getRGB(i*4, j*4)==-1)
{
pixels[i][j]=0;
}
else
{
pixels[i][j]=1;
}
}
}
对于(int i=0;i您可能应该引入一种方法,以某种方式将4x4像素阵列计算为0
或1
,例如,基于平均亮度:
public static void printAllARGBDetails(BufferedImage image) {
int width = image.getWidth();
int height = image.getHeight();
System.out.println("Image Dimension: Height-" + height + ", Width-"
+ width);
System.out.println("Total Pixels: " + (height * width));
int pixels[][]=new int[21][21];
int pixel=width/21;
System.out.println("Pixel=" +pixel);
for (int i = 20; i>=0 ; i--) {
for (int j = 20; j>=0 ; j--) {
pixels[i][j] = getPixel (image, i, j);
System.out.println(String.format ("Pixel[%d,%d]=%d", i, j, pixels[i][j]));
}
}
}
private static final long LUMINOSITY_THRESHOLD = 23000;
private static int getPixel (BufferedImage image, int i, int j) {
long totalLuminosity = 0;
for (int k = 0; k < 4; k++) {
for (int m = 0; m < 4; m++) {
long luminosity = getLuminosity (image.getRGB (i*4 + k, j*4 + m));
totalLuminosity += luminosity;
}
}
return totalLuminosity/16 > LUMINOSITY_THRESHOLD ? 0 : 1;
}
private static int getLuminosity (int rgb) {
int r = rgb >> 16;
int g = (rgb >> 8) & 0xFF;
int b = rgb & 0xFF;
int luminosity = 21*r + 71*g + 7*b;
return luminosity;
}
publicstaticvoidprintallargbdetails(buffereImage图像){
int width=image.getWidth();
int height=image.getHeight();
System.out.println(“图像尺寸:高度-”+高度+”,宽度-”
+宽度);
System.out.println(“总像素:”+(高度*宽度));
整数像素[][]=新整数[21][21];
int像素=宽度/21;
System.out.println(“像素=”+像素);
对于(int i=20;i>=0;i--){
对于(int j=20;j>=0;j--){
像素[i][j]=getPixel(图像,i,j);
System.out.println(String.format(“像素[%d,%d]=%d”,i,j,像素[i][j]);
}
}
}
专用静态最终长亮度_阈值=23000;
私有静态int getPixel(BuffereImage图像、int i、int j){
长总照度=0;
对于(int k=0;k<4;k++){
对于(int m=0;m<4;m++){
长亮度=getluminity(image.getRGB(i*4+k,j*4+m));
总光度+=光度;
}
}
返回总亮度/16>亮度阈值?0:1;
}
专用静态int getLuminosity(int rgb){
int r=rgb>>16;
int g=(rgb>>8)&0xFF;
intb=rgb&0xFF;
内部亮度=21*r+71*g+7*b;
返回亮度;
}
>我假设你只是为了证明概念或赋值而做这件事?如果不是,在现实生活中有很多要考虑的问题。而且已经有许多图书馆已经解决了这些问题。是的,这是我的项目任务。没有亮度。我只想用宽度为21的模块大小来获得颜色模块的大小。。我尝试了你的代码,它给出了与我完全相同的结果。@Berkan我理解你的问题的方式是,你有一个QR21代码存储在一个294x294图像中。因此,基本上你必须将全比例图像转换为21x21黑白图像。这正是我建议的代码所做的。它还增加了我的数组索引数。