2017-09-29 10 views
0

이미지는 회색 음영으로 덮여 있지만 BufferedImage.TYPE_3BYTE_BGR 때문에 세 개의 타일로 표시됩니다.매트를 회색조 이미지로 변환하는 openCV

.TYPE_BYTE_GRAY가 작동하지 않습니다.

어떻게하면 그레이 스케일 이미지 하나만 표시 할 수 있습니까?

public void matToBufferedImage(Mat matRGB){ 
    Mat mGray = new Mat(); 
    Imgproc.cvtColor(matRGB, mGray, Imgproc.COLOR_BGR2GRAY); 
    int width = mGray.width(), height = mGray.height(), channels = mGray.channels(); 
    byte[] source = new byte[width * height * channels]; 
    mGray.get(0, 0, source); 

    image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); 

    final byte[] target = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); 
    System.arraycopy(source, 0, target, 0, source.length); 
} 

답변

0

이러한 경우 두 가지 방법을 사용합니다. 그래서, 그 두 가지 방법을 추가 한 후, 당신은 같은를 사용하는 것이

public static BufferedImage Mat2BufferedImage(Mat matrix) throws IOException { 
    MatOfByte mob=new MatOfByte(); 
    Imgcodecs.imencode(".jpg", matrix, mob); 
    return ImageIO.read(new ByteArrayInputStream(mob.toArray())); 
} 

public static Mat BufferedImage2Mat(BufferedImage image) throws IOException { 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    ImageIO.write(image, "jpg", byteArrayOutputStream); 
    byteArrayOutputStream.flush(); 
    return Imgcodecs.imdecode(new MatOfByte(byteArrayOutputStream.toByteArray()), Imgcodecs.CV_LOAD_IMAGE_UNCHANGED); 
} 

,

Imgproc.cvtColor(matRGB, mGray, Imgproc.COLOR_BGR2GRAY); 

image = Mat2BufferedImage(mGray); 
+0

그것은 비디오 캡처 및 인식이다. 코드가 그렇게 작동하거나 정지 이미지 만 작동합니까? –

+0

비디오는 이미지 모음 일뿐입니다. 효과가있을 것입니다. 왜 너 자신을 보지 그래? – Ultraviolet