Ошибка выполнения преобразования формы сплайна тонкой пластины [с кодом -1073741819] - PullRequest
0 голосов
/ 08 апреля 2019

Я пытался деформировать изображение, используя opencv 3.1.0, класс Shape Tranformation.В частности, алгоритм тонких пластин

(на самом деле я пробовал блок кода из преобразователей формы и интерфейсов OpenCV3.0 )

Но проблема в том, что я продолжаю получать время выполненияошибка времени с консолью, говорящей

D: \ Project \ TPS_Transformation \ x64 \ Debug \ TPS_Transformation.exe (процесс 13776), завершена с кодом -1073741819

Я выяснилкод, вызвавший ошибку: tps->estimateTransformation(source, target, matches);, то есть часть, которая выполняет алгоритм преобразования в первый раз.

Я искал ошибку времени выполнения, сказав, что это может быть проблема с DLL, но у меня нет проблем с запускомopencv в общем.Я получаю сообщение об ошибке при запуске алгоритма преобразования формы, в частности функции estimateTranformation.

#include <iostream>

#include <opencv2\opencv.hpp>
#include <opencv2\imgproc.hpp>
#include "opencv2\shape\shape_transformer.hpp"

using namespace std;
using namespace cv;

int main()
{

    Mat img1 = imread("D:\\Project\\library\\opencv_3.1.0\\sources\\samples\\data\\graf1.png");


    std::vector<cv::Point2f> sourcePoints, targetPoints;
    sourcePoints.push_back(cv::Point2f(0, 0));
    sourcePoints.push_back(cv::Point2f(399, 0));
    sourcePoints.push_back(cv::Point2f(0, 399));
    sourcePoints.push_back(cv::Point2f(399, 399));

    targetPoints.push_back(cv::Point2f(100, 0));
    targetPoints.push_back(cv::Point2f(399, 0));
    targetPoints.push_back(cv::Point2f(0, 399));
    targetPoints.push_back(cv::Point2f(399, 399));

    Mat source(sourcePoints, CV_32FC1);
    Mat target(targetPoints, CV_32FC1);
    Mat respic, resmat;

    std::vector<cv::DMatch> matches;
        for (unsigned int i = 0; i < sourcePoints.size(); i++)
            matches.push_back(cv::DMatch(i, i, 0));

    Ptr<ThinPlateSplineShapeTransformer> tps = createThinPlateSplineShapeTransformer(0);
    tps->estimateTransformation(source, target, matches);
    std::vector<cv::Point2f> transPoints;
    tps->applyTransformation(source, target);

    cout << "sourcePoints = " << endl << " " << sourcePoints << endl << endl;
    cout << "targetPoints = " << endl << " " << targetPoints << endl << endl;
    //cout << "transPos = " << endl << " " << transPoints << endl << endl;
    cout << img1.size() << endl;

    imshow("img1", img1); // Just to see if I have a good picture

    tps->warpImage(img1, respic);

    imshow("Tranformed", respic); //Always completley grey ?
    waitKey(0);

    return 0;
}

Я просто хочу иметь возможность запустить алгоритм, чтобы я мог проверить, является ли это алгоритм, который я хочу,

Пожалуйста, помогите.

Спасибо.

opencv-версия 3.1.0

IDE: Visual Studio 2015

ОС: Windows 10

...