2

だから私はOpenCVで画像を回転させようとしていますが、理解できないエラーが発生し、誰かがそれに光を当てることができることを望んでいます.

private Bitmap doStuff(Bitmap image)
{
    Mat img = new Mat();

    Utils.BitmaptoMat(image, img);

    Points[] pointsArray = new Point[3];

    pointsArray = getPoints(img); //Standard Template Matching

    double xDiff = pointArray[1].x - pointArray[0].x;
    double yDiff = pointArray[1].y - pointArray[0].y;
    double angle = Math.toDegrees(Math.atan2(yDiff, xDiff); //Angle Returned is -178.43493091440774

    img = roatate(img, angle); //Method call

    Utils.matToBitmap(img, returnFile) //Error is thrown when it hits this line
}

private Mat rotate(Mat img, double angle)
{
    double radians = Math.toRadians(angle); //radians is -3.1142770450250317
    double sin = Math.abs(Math.sin(radians)); // sin is 0.027312211802207727
    double cos = Math.abs(Math.cos(radians)); //cos is 0.9996269519608159

    int newWidth = (int) (img.width() * cos + img.height() * sin); //newWidth is 652
    int newHeight = (int) (img.width() * sin + img.height() * cos); //newHeight is 497

    // rotating image
    Point center = new Point(newWidth/2, newHeight/2);
    Mat rotImage = Imgproc.getRotationMatrix2D(center, angle, 1.0); 
    //1.0 means 100 % scale
    Size size = new Size(newWidth, newHeight);
    Imgproc.warpAffine(img, img, rotImage, size, Imgproc.INTER_LINEAR + Imgproc.CV_WARP_FILL_OUTLIERS);

    return img;
}

エラー:

OpenCV Error: Assertion failed (src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols) in void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean), file /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp, line 97

nMatToBitmap catched cv::Exception: /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean)

編集:わかりやすくするためにさらに追加

4

1 に答える 1

1

エラーから読み取れるように、問題は「Utils.matToBitmap」関数内のアサーションにあります。

Assertion failed (src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols) 

この条件を満たすには、3 つの部分すべてを満たす必要があります。どれが間違っているかを確認する最も簡単な方法は、これらすべての値 ( src.dimsinfo.height(uint32_t)src.rowsinfo.widthおよび(uint32_t)src.cols) を出力し、状態のすべての部分を手動で確認することです。おそらく問題はinfo.height == (uint32_t)src.rowsまたはinfo.width == (uint32_t)src.colsにありますが、最初の部分も確認してください。これでも問題の解決に役立たない場合は、お電話の前に上記の変数の値と、変数Utils.matToBitmap(img, returnFile)とは何かをお知らせくださいreturnFile

于 2015-03-13T02:51:20.690 に答える