Java 对opencv2中的图像应用仿射变换时出错
我在java中使用warpAffine函数对图像进行了deskew,但运行时注意到:Java 对opencv2中的图像应用仿射变换时出错,java,opencv,Java,Opencv,我在java中使用warpAffine函数对图像进行了deskew,但运行时注意到: OpenCV Error: Assertion failed ((M0.type() == CV_32F || M0.type() == CV_64F) && M0.rows == 2 && M0.cols == 3) in warpAffine 这是我的职责: private Mat deskew(Mat image,boolean negated){ if
OpenCV Error: Assertion failed ((M0.type() == CV_32F || M0.type() == CV_64F) && M0.rows == 2 && M0.cols == 3) in warpAffine
这是我的职责:
private Mat deskew(Mat image,boolean negated){
if(!negated) {
for (int row = 0; row < image.rows(); row++) {
for (int col = 0; col < image.cols(); col++) {
double value = 255 - image.get(row, col)[0];
image.put(row, col, value);
}
}
}
Moments m = Imgproc.moments(image);
if(Math.abs(m.get_m02()) < 1e-2) {
return image;
}
double skew = m.get_m11() / m.get_m02();
int rows = 2,cols = 3;
Size size = new Size(rows,cols);
Mat M = new Mat(size,CvType.CV_32F);
M.put(0, 0, 1.0);
M.put(0, 1, skew);
M.put(0, 2, -0.5*image.rows()*skew);
M.put(1, 0, 0.0);
M.put(1, 1, 1.0);
M.put(1, 2, 0.0);
Mat imagedst = new Mat();
Imgproc.warpAffine(image, imagedst, M, image.size(),Imgproc.WARP_INVERSE_MAP|Imgproc.INTER_LINEAR);
return imagedst;
}
private Mat deskew(Mat图像,布尔否定){
如果(!否定){
对于(int row=0;row
我认为当我用CvType.CV_32F type初始化Mat M时是错误的 M的大小是错误的
尺寸
要求(宽度、高度)
,而不是(行、列)
。因此,您需要将大小创建为:
Size size = new Size(cols,rows);
Mat M = new Mat(size, CvType.CV_32F);
Mat M = new Mat(rows, cols, CvType.CV_32F);
或者您可以将M
创建为:
Size size = new Size(cols,rows);
Mat M = new Mat(size, CvType.CV_32F);
Mat M = new Mat(rows, cols, CvType.CV_32F);