Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对opencv2中的图像应用仿射变换时出错_Java_Opencv - Fatal编程技术网

Java 对opencv2中的图像应用仿射变换时出错

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

我在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(!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);