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行 –