3 개 이미지의 픽셀 수를 동시에 계산하는 방법

스리

3 개 이미지의 총 픽셀을 동시에 계산하려면 어떻게해야합니까? Java Swing Worker 및 Thread로 시도했지만 답변을 얻었지만 지정된 범위의 총 픽셀 수 (각 이미지에 대해 30 초, 이미지 크기 480 * 303)를 반환하는 데 1.30 분이 걸립니다. 하지만 30 초 이내에 동시에 세 개의 이미지에 대한 답을 얻어야합니다.

public class ImageProcessor1 implements Runnable{
static int blackPix=0;
BufferedImage tempImg;
public static int blackPixel=0;
public ImageProcessor1(String path) throws Exception{
tempImg = ImageIO.read(new File(path));
}

private static int[] getPixelData(BufferedImage img, int x, int y) {
    int argb = img.getRGB(x, y);

    int rgb[] = new int[]{
        (argb >> 16) & 0xff, //red
        (argb >> 8) & 0xff, //green
        (argb) & 0xff //blue
    };
    System.out.println("Process1 :rgb: " + rgb[0] + " " + rgb[1] + " " + rgb[2]);
    return rgb;
}

@Override
public void run() {
     int[][] pixelData = new int[tempImg.getHeight() * tempImg.getWidth()][3];
        int[] rgb;
        int height=tempImg.getHeight();
        int width=tempImg.getWidth();
        int counter = 0;
        for (int i = 0; i < width; i++) {
            for (int j = 0; j < height; j++) {
                rgb = getPixelData(tempImg, i, j);
                if(rgb[0]<125 && rgb[0]>105 && rgb[1]<125 && rgb[1]>105 && rgb[2]<125 && rgb[2]>105)
                {
                    blackPixel+=1;
                }
            }
        }
}

}

올리버 얀 크릴 로우

이렇게 작은 사진을 반복하는 데 30 초가 걸린다는 것은 매우 이상합니다!

약간의 프로파일 링 후 핫 루프에서 println-statement를 사용하면 속도가 크게 느려지는 것 같습니다.

코드를 약간 수정 한 후 10500x5788 이미지는 내 컴퓨터에서 ~ 3 초가 걸립니다.

수정 된 버전 :

package application;

import java.awt.image.BufferedImage;
import java.io.File;
import java.util.concurrent.TimeUnit;

import javax.imageio.ImageIO;

public class ImageProcessor1 implements Runnable {

  BufferedImage tempImg;
  public static int blackPixel = 0;

  public ImageProcessor1(final String path) throws Exception {
    final long start = System.nanoTime();

    tempImg = ImageIO.read(new File(path));
    // Use tracing, profiling and sampling to proof performance issues and fixes
    System.out.println("ImageIO took " + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start)
        + " ms.");
  }

  @Override
  public void run() {
    long start = System.nanoTime();
    final int height = tempImg.getHeight();
    System.out.println("Getting height '" + height + "' took "
        + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start) + " ms.");


    start = System.nanoTime();
    final int width = tempImg.getWidth();
    System.out.println("Getting width '" + width + "' took "
        + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start) + " ms.");

    start = System.nanoTime();

    // reuse variables
    int argb;
    int red;
    int green;
    int blue;

    for (int i = 0; i < width; i++) {
      for (int j = 0; j < height; j++) {
        // HOT LOOP. Do as little as possible. No println calls!
        argb = tempImg.getRGB(i, j);

        // inline all method calls
        red = argb >> 16 & 0xff; // red
        green = argb >> 8 & 0xff; // green
        blue = argb & 0xff; // blue

        if (red < 125 && red > 105 && green < 125 && green > 105 && blue < 125 && blue > 105) {
          blackPixel += 1;
        }
      }
    }
    System.out.println("Iterating pixels took "
        + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start) + " ms.");
  }

  public static void main(final String[] args) throws Exception {
    new ImageProcessor1("big.jpg").run();
    System.out.println("Number of blackpixels = " + blackPixel);
  }

}

보다 일반적인 메모에서 모든 이미지를 RAM으로 읽어 들인 다음 처리하기 때문에 접근 방식에주의해야합니다. 한 번에 3 개 이상의 큰 이미지를 사용하면 OutOfMemoryError가 발생할 가능성이 있습니다. 이것이 문제가되는 경우 이미지를 입력 스트림으로 읽고 한 번에 이미지의 작은 버퍼 만 처리 할 수 ​​있습니다.

이를 수행하는 방법을 보려면 http://imagej.nih.gov/ij/source/ij/io/ImageReader.java를 참조하십시오 .

다중 스레드의 출력을 누적하는 방법을 보려면 다중 스레드 코드를 작성하고 모든 스레드의 출력을 단일 파일에 누적하는 방법을 참조하십시오 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MATLAB에서 3 개의 정의 된 픽셀까지의 픽셀 거리 계산

분류에서Dev

Numpy-4 개의 입력 이미지에서 새 이미지를 만들고 가장 밝은 픽셀을 선택하는 방법 (최대 (R + G + B))

분류에서Dev

Matplotlib-RGB 이미지의 픽셀 강도를 다시 조정하는 방법

분류에서Dev

파이썬에서 이미지를 읽고 정의 된 픽셀 순서로 다시 쓸 수있는 방법

분류에서Dev

이미지의 왼쪽 또는 오른쪽에 레이블 X 픽셀 수를 설정하는 방법 C #

분류에서Dev

OpenCV 및 C +++의 이미지에서 두 개체 (점) 사이의 거리 (m 및 픽셀 단위)를 찾는 방법은 무엇입니까?

분류에서Dev

3 개의 이미지를 한 줄에 맞추는 방법

분류에서Dev

DB Laravel의 3 필드에 3 개의 이미지를 삽입하는 방법

분류에서Dev

Excel에서 3 개의 개별 단어를 모두 포함하는 셀 계산

분류에서Dev

시작 (x, y), 픽셀 길이 및 각도를 갖는 픽셀 좌표를 계산하는 방법은 무엇입니까?

분류에서Dev

캐 러셀 슬라이더에 공간을 추가하고 3 개의 이미지 만 표시하는 방법

분류에서Dev

장치의 픽셀 비율에 관계없이 SRCSET을 사용하여 특정 크기의 이미지를 표시하는 방법은 무엇입니까?

분류에서Dev

navbar-right (Bootstrap)에 3 개 이상의 이미지를 배치하는 방법

분류에서Dev

navbar-right (Bootstrap)에 3 개 이상의 이미지를 배치하는 방법

분류에서Dev

이미지의 rgb 픽셀 색상 수를 찾는 가장 빠른 방법

분류에서Dev

페이지 조회수를 계산하는 추적 픽셀을 구현하는 방법은 무엇입니까?

분류에서Dev

웹 페이지의 Flash 개체 수를 계산하는 방법

분류에서Dev

회전 된 이미지 (투명 픽셀이있을 수 있음)가 포함 된 사각형의 크기를 계산하는 방법

분류에서Dev

동일한 Tkinter Toplevel () 창에 두 개의 이미지를 표시하는 방법

분류에서Dev

QGraphicsScene에서 QGraphicsPixmapItem의 픽셀 경계를 찾는 방법

분류에서Dev

Excel 시트의 열에 채워진 셀 수를 계산하는 방법

분류에서Dev

1 픽셀 너비의 개체가 아닌 모든 픽셀 너비에서 작동하도록 기본 라인 감지 필터를 다시 작성하는 방법

분류에서Dev

윤곽선 opencv 내에서 0이 아닌 픽셀을 계산하는 방법

분류에서Dev

opencv에서 이미지 내 픽셀 사이의 유클리드 거리를 찾는 방법

분류에서Dev

MATLAB에서 이미지의 모드를 계산하는 방법

분류에서Dev

수천 개의 이미지를 Amazon S3에 한 번에 업로드하는 방법

분류에서Dev

Windows 10에서 WriteableBitmapEx를 사용하여 이미지 픽셀 색상 변경 성능을 개선하는 방법은 무엇입니까?

분류에서Dev

픽셀 행렬을 사용하여 동일한 플롯에 여러 이미지를 배치하는 방법

분류에서Dev

3 개의 매개 변수 (페이지 길이)를 받아들이고 블록 영역을 계산하는 JavaScript 함수를 만들고 호출하는 방법

Related 관련 기사

  1. 1

    MATLAB에서 3 개의 정의 된 픽셀까지의 픽셀 거리 계산

  2. 2

    Numpy-4 개의 입력 이미지에서 새 이미지를 만들고 가장 밝은 픽셀을 선택하는 방법 (최대 (R + G + B))

  3. 3

    Matplotlib-RGB 이미지의 픽셀 강도를 다시 조정하는 방법

  4. 4

    파이썬에서 이미지를 읽고 정의 된 픽셀 순서로 다시 쓸 수있는 방법

  5. 5

    이미지의 왼쪽 또는 오른쪽에 레이블 X 픽셀 수를 설정하는 방법 C #

  6. 6

    OpenCV 및 C +++의 이미지에서 두 개체 (점) 사이의 거리 (m 및 픽셀 단위)를 찾는 방법은 무엇입니까?

  7. 7

    3 개의 이미지를 한 줄에 맞추는 방법

  8. 8

    DB Laravel의 3 필드에 3 개의 이미지를 삽입하는 방법

  9. 9

    Excel에서 3 개의 개별 단어를 모두 포함하는 셀 계산

  10. 10

    시작 (x, y), 픽셀 길이 및 각도를 갖는 픽셀 좌표를 계산하는 방법은 무엇입니까?

  11. 11

    캐 러셀 슬라이더에 공간을 추가하고 3 개의 이미지 만 표시하는 방법

  12. 12

    장치의 픽셀 비율에 관계없이 SRCSET을 사용하여 특정 크기의 이미지를 표시하는 방법은 무엇입니까?

  13. 13

    navbar-right (Bootstrap)에 3 개 이상의 이미지를 배치하는 방법

  14. 14

    navbar-right (Bootstrap)에 3 개 이상의 이미지를 배치하는 방법

  15. 15

    이미지의 rgb 픽셀 색상 수를 찾는 가장 빠른 방법

  16. 16

    페이지 조회수를 계산하는 추적 픽셀을 구현하는 방법은 무엇입니까?

  17. 17

    웹 페이지의 Flash 개체 수를 계산하는 방법

  18. 18

    회전 된 이미지 (투명 픽셀이있을 수 있음)가 포함 된 사각형의 크기를 계산하는 방법

  19. 19

    동일한 Tkinter Toplevel () 창에 두 개의 이미지를 표시하는 방법

  20. 20

    QGraphicsScene에서 QGraphicsPixmapItem의 픽셀 경계를 찾는 방법

  21. 21

    Excel 시트의 열에 채워진 셀 수를 계산하는 방법

  22. 22

    1 픽셀 너비의 개체가 아닌 모든 픽셀 너비에서 작동하도록 기본 라인 감지 필터를 다시 작성하는 방법

  23. 23

    윤곽선 opencv 내에서 0이 아닌 픽셀을 계산하는 방법

  24. 24

    opencv에서 이미지 내 픽셀 사이의 유클리드 거리를 찾는 방법

  25. 25

    MATLAB에서 이미지의 모드를 계산하는 방법

  26. 26

    수천 개의 이미지를 Amazon S3에 한 번에 업로드하는 방법

  27. 27

    Windows 10에서 WriteableBitmapEx를 사용하여 이미지 픽셀 색상 변경 성능을 개선하는 방법은 무엇입니까?

  28. 28

    픽셀 행렬을 사용하여 동일한 플롯에 여러 이미지를 배치하는 방법

  29. 29

    3 개의 매개 변수 (페이지 길이)를 받아들이고 블록 영역을 계산하는 JavaScript 함수를 만들고 호출하는 방법

뜨겁다태그

보관