0
我写我自己的算法来确定的边缘,然后找到的角点。 但是后来在转换image的时候遇到了麻烦。我写了一些代码来实现结果,但是得到了上面指定的错误。 任何人都可以帮助我请出来。 在此先感谢!java.lang.UnsupportedOperationException:垫数据类型不兼容:4
Mat mat = new Mat(w, h, CvType.CV_32S);
MatOfPoint2f finalc = new MatOfPoint2f();
MatOfPoint2f ma = new MatOfPoint2f();
mat.put(0, 0, array);
Mat quad = new Mat(w,h,CvType.CV_32S);
quad.put(0,0,w,0,w,h,0,w);
ma.put((int)a[0][1],(int)a[0][0],(int)a[1][1],(int)a[1][0],(int)a[2][1],(int)a[2][0],(int)a[3][1],(int)a[3][0]);
Imgproc.approxPolyDP(ma,finalc,2.0,true);
Mat transmtx = Imgproc.getPerspectiveTransform(finalc, quad);
Imgproc.warpPerspective(mat, quad, transmtx, quad.size());
MatOfByte matOfByte = new MatOfByte();
Highgui.imencode(".jpg", quad, matOfByte);
byte[] byteArray = matOfByte.toArray();
//InputStream in = new ByteArrayInputStream(byteArray);
//BufferedImage bufferedImage = ImageIO.read(in);
File f = new File("retrieve1.jpg");
BufferedImage img1 = new BufferedImage(w, h, 12);
WritableRaster raster = (WritableRaster)img1.getData();
raster.setDataElements(0,0,w,h,byteArray);
img1.setData(raster);
try
{
ImageIO.write(img1,"jpg",f);
}
catch(Exception e)
{}
}
所有我基本上试图做的是将此(C++)代码的一部分移植到java。 https://github.com/bsdnoobz/opencv-code/blob/master/quad-segmentation.cpp
请格式化您的代码。并只发布相关部分。 –
4是CvType.CV_32S,所以也许你的数据没有使用这种类型。 – andy
@andy感谢您的回复。但是当我使用CV_8UC1我得到以下错误:OpenCV的错误:断言失败(npoints> = 0 &&(深度== CV_32S ||深度== CV_ 32F))的CV :: approxPolyDP,文件.. \ .. \ .. \ .. \的OpenCV \模块\ imgproc \ SRC \轮廓。 CPP,1871行 –