在eclipse中使用java捕获图像

时间:2018-04-11 11:05:09

标签: java

这是我的代码

import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.WritableRaster;

import java.io.FileNotFoundException;
import java.io.IOException;

import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;

import org.opencv.core.Core; 
import org.opencv.core.Mat; 
import org.opencv.videoio.VideoCapture;  

public class TakingSnapshotUsingCamera extends Application { 
Mat matrix = null; 


public void start(Stage stage) throws FileNotFoundException, IOException 
{        

//Capturing the snapshot from the camera 
TakingSnapshotUsingCamera obj = new TakingSnapshotUsingCamera(); 
WritableImage writableImage = obj.capureSnapShot();  

//Setting the image view 
ImageView imageView = new ImageView(writableImage); 

//setting the fit height and width of the image view 
imageView.setFitHeight(400); 
imageView.setFitWidth(600); 

//Setting the preserve ratio of the image view 
imageView.setPreserveRatio(true);  

//Creating a Group object  
Group root = new Group(imageView); 

//Creating a scene object 
Scene scene = new Scene(root, 600, 400); 

//Setting title to the Stage 
stage.setTitle("Capturing an image"); 

//Adding scene to the satge 
stage.setScene(scene); 

//Displaying the contents of the stage 
stage.show();       
}

public WritableImage capureSnapShot() { 
WritableImage WritableImage = null; 

//Loading the OpenCV core library  
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );        

//Instantiating the VideoCapture class (camera:: 0) 
VideoCapture capture = new VideoCapture(0);     

//Reading the next video frame from the camera 
Mat matrix = new Mat(); 
capture.read(matrix); 

//If camera is opened  
if(capture.isOpened()) { 

//If there is next video frame 
if (capture.read(matrix)) {      

//Creating BuffredImage from the matrix 
BufferedImage image = new BufferedImage(matrix.width(), matrix.height(), 
BufferedImage.TYPE_3BYTE_BGR); 

WritableRaster raster = image.getRaster(); 
DataBufferByte dataBuffer = (DataBufferByte) raster.getDataBuffer(); 
byte[] data = dataBuffer.getData(); matrix.get(0, 0, data); 
this.matrix = matrix; 

//Creating the Writable Image 
WritableImage = SwingFXUtils.toFXImage(image, null); 
} 
}
return WritableImage; 
}  
public static void main(String args[]) {  
launch(args);  
}  
}

在此处收到错误

  

ImageView imageView = new ImageView(writableImage);构造函数   ImageView(WritableImage)未定义

这个代码上的很多错误我已经导入了那个jar文件。但仍然给我错误。我正在使用 opencv 库。如何添加opencv库我已添加但我不知道它是正确的还是没有,任何帮助在此先感谢。

1 个答案:

答案 0 :(得分:0)

ByteArrayOutputStream  byteOutput = new ByteArrayOutputStream();

ImageIO.write( SwingFXUtils.fromFXImage( writableImage, null ), "png", byteOutput );

InputStream myInputStream = new ByteArrayInputStream(byteOutput.toByteArray()); 

//setting the image
ImageView imageView = new ImageView(new Image(myInputStream));