【发布时间】:2019-02-22 18:27:20
【问题描述】:
我目前正在尝试实现网络摄像头扫描仪。我目前的问题是使用 Java 时无法捕获高质量的图像。 我使用的相机有 8MP,当我使用 Windows“相机”应用程序时,它会产生很棒的图像。遗憾的是,我无法用 JavaCV 复制这种品质。
这是我用来捕获图像的(重要)代码:
FrameGrabber grabber;
private Java2DFrameConverter frameConverter;
public JavaCVCamera(String imagePath, double rotation) {
this.frameConverter = new Java2DFrameConverter();
this.imagePath = imagePath;
this.rotation = rotation;
this.grabber = new OpenCVFrameGrabber(0);
this.grabber.setImageWidth(3264);
this.grabber.setImageHeight(2448);
try {
this.grabber.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void saveImageToFile(boolean applyUpscaling, boolean applyRotation) {
File folder = new File(imagePath);
if (!folder.exists()) {
folder.mkdirs();
}
try {
BufferedImage img = frameConverter.convert(grabber.grab());
if (applyUpscaling) {
img = Thumbnails.of(img).forceSize(3264, 2448).asBufferedImage();
}
if (applyRotation) {
img = rotateImageByDegrees(img, rotation);
}
File path = new File(imagePath + "/img_"
+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy_MM_dd_HH_mm_ss")) + "." + "png");
ImageIO.write(img, "png", path);
LOGGER.info("Captured Image: {}", path.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
(注意:我不使用放大来使图像变大)
为了您的理解,这里有一个例子:
- 使用 Windows 相机应用拍摄
- https://imgur.com/a/oOuMJdl
- 使用 Java+JavaCV 捕获
- https://imgur.com/a/DghFT8z
有没有办法以与 Windows 相机应用相同的分辨率和质量捕捉图像?
亲切的问候, 问
【问题讨论】:
-
尝试使用 ImageMagic 代替 AWT 功能。