gpt4 book ai didi

java - 将仿射变换应用于 opencv2 中的图像时出错

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:33 25 4
gpt4 key购买 nike

我在 java 中用 warpAffine 函数去歪斜图像,但是当我运行它时注意到:

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;
}

我认为当我用 CvType.CV_32F 类型初始化 Mat M 时是错误的。

最佳答案

M 的大小错误。

Size 需要 (width, height),而不是 (rows, cols)。所以你需要创建 size 为:

Size size = new Size(cols,rows);
Mat M = new Mat(size, CvType.CV_32F);

或者您可以将 M 创建为:

Mat M = new Mat(rows, cols, CvType.CV_32F);

关于java - 将仿射变换应用于 opencv2 中的图像时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com