如何将mat(OpenCV)转换为图像(JavaFX)? 我认为这不是最好的方法:
MatOfByte byteMat = new MatOfByte();
Highgui.imencode(".bmp", mat, byteMat);
return new Image(new ByteArrayInputStream(byteMat.toArray()));
P.S。
Image - import javafx.scene.image.Image;
答案 0 :(得分:0)
这样做的一种方法是。我不记得我从哪里得到这个来源: -
private Image mat2Image(Mat frame)
{
int type = BufferedImage.TYPE_BYTE_GRAY;
if ( frame.channels() > 1 ) {
type = BufferedImage.TYPE_3BYTE_BGR;
}
int bufferSize = frame.channels()*frame.cols()*frame.rows();
byte [] b = new byte[bufferSize];
frame.get(0,0,b); // get all the pixels
BufferedImage image = new BufferedImage(frame.cols(),frame.rows(), type);
final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
System.arraycopy(b, 0, targetPixels, 0, b.length);
return SwingFXUtils.toFXImage(image,null);
}
使用Opencv中的Converters类和JDK8可能有一种方法可以使它更整洁。如果我发现任何此类事情,我会更新。
答案 1 :(得分:0)
Paritosh,你的方法的问题是它只适用于类型为import java.util.Scanner;
public class Q2
{
public static void main(String args [])
{
Scanner keyboardIn = new Scanner(System.in);
String Fname;
String Lname;
System.out.print("Please enter first name: ");
Fname=keyboardIn.nextLine();
System.out.print("Please enter last name: ");
Lname=keyboardIn.nextLine();
if(Fname.compareTo(Lname) < 0)
{
System.out.println(Lname + " Is longest ");
}
else if(Fname.compareTo(Lname) > 0)
{
System.out.println(Fname + " Is longest ");
}
}
}
或CvType.CV_8U
的Mats,因为这些Mats可以包含在字节数组中。如果Mat的类型是,CvType.CV_8S
,那么你需要一个float数组来保存数据。 float数组不能被System.array复制到CvType.CV_32F
数组中。