Ошибка подтверждения <dst.data! = Src.data> в неизвестной функции ../../ocv/opencv/modules/imgproc/src/imgwarp.cpp

0

Эй, пожалуйста, кто-нибудь может помочь мне найти решение этой ошибки:

Утверждение не выполнено с неизвестной функцией.. /../ocv/opencv/modules/imgproc/src/imgwarp.cpp

Я пытаюсь скомпилировать код, который существует в этой ссылке: http://ipwithopencv.googlecode.com/svn/trunk/ThinPlateSpline/ThinPlateSpline/

im, используя 2 класса и основные:

вот мой основной код:

#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include "CThinPlateSpline.h"
#include "iostream"

using namespace std; 

int _tmain(int argc, _TCHAR* argv[])
{

    // load a nice picture

    cv::Mat img = cv::imread("lena.jpg");

    // generate some generic points
    // usually you would use a interest point detector such as SURF or SIFT
    std::vector<cv::Point> iP, iiP;

    // push some points into the vector for the source image
    iP.push_back(cv::Point(50,50));
    iP.push_back(cv::Point(400,50));
    iP.push_back(cv::Point(50,400));
    iP.push_back(cv::Point(400,400));
    iP.push_back(cv::Point(256,256));
    iP.push_back(cv::Point(150,256));

    // push some point into the vector for the dst image
    iiP.push_back(cv::Point(70,70));
    iiP.push_back(cv::Point(430,60));
    iiP.push_back(cv::Point(60,410));
    iiP.push_back(cv::Point(430,420));
    iiP.push_back(cv::Point(220,280));
    iiP.push_back(cv::Point(180,240));

    // create thin plate spline object and put the vectors into the constructor
    CThinPlateSpline tps(iP,iiP);


    // warp the image to dst
    Mat dst;
    tps.warpImage(img,dst,0.01,INTER_CUBIC,BACK_WARP);


    // show images
    cv::imshow("original",img);
    cv::imshow("distorted",dst);
    //cv::waitKey(0);
    //Sleep(5);
    cv::waitKey(5000); 
    return 0;
}

вот метод imagewarp:

void CThinPlateSpline::warpImage(const Mat& src, Mat& dst, float lambda, const int interpolation,const TPS_INTERPOLATION tpsInter)
{
    Size size = src.size();
    dst = Mat(size,src.type());

    // only compute the coefficients new if they weren't already computed
    // or there had been changes to the points
    if(tpsInter == BACK_WARP && !FLAG_COEFFS_BACK_WARP_SET)
    {
        computeSplineCoeffs(pSrc,pDst,lambda,tpsInter);
    }
    else if(tpsInter == FORWARD_WARP && !FLAG_COEFFS_FORWARD_WARP_SET)
    {
        computeSplineCoeffs(pSrc,pDst,lambda,tpsInter);
    }

    computeMaps(size,mapx,mapy);

    remap(src,dst,mapx,mapy,interpolation);
}

есть другие классы, которые существуют в ссылке также CthinPlateSpline.cpp и CthinPlateSpline.h... пожалуйста, мне действительно нужна помощь и извините за мой плохой английский

  • 0
    код, который вы показываете, не связан с проблемой. пожалуйста выкопайте src для tps.warpImage ()
  • 0
    ссылка здесь ThinPlateSplace.cpp, где существуют все методы определения
Показать ещё 6 комментариев
Теги:
opencv
image
visual-studio-2010

2 ответа

0
Лучший ответ

Я могу запустить их на своем Mac с OpenCV 2.4.7

Изображение результата - скрученная лен

Я просто меняю два места следующим образом

Прежде всего, я меняю включенный файл в main.cpp, чтобы стать

#include <opencv2/opencv.hpp>
#include "CThinPlateSpline.h"
#include <iostream>
#include <vector>

И включил файл в CThinPlateSpline.cpp, чтобы стать

#include <vector>
#include <opencv2/opencv.hpp>
#include "CThinPlateSpline.h"

Я использую только 3 файла main.cpp, CThinPlateSpline.cpp и CThinPlateSpline.h

библиотеки связаны

-lopencv_imgproc -lopencv_core -lopencv_highgui

  • 0
    Наконец-то это работает, дорогой @ maythe4thbewithu, я хотел бы поблагодарить тебя за помощь
  • 0
    Так в чем же проблема с путем?
Показать ещё 1 комментарий
0

"Утверждение не удалось" в OpenCV обычно происходит, когда ваш вход Mat имеет неправильный размер, например, ноль (пустой мат) или меньше требования функции.

Не могли бы вы проверить img после cv::Mat img = cv::imread("lena.jpg"); img.empty() или показать img imshow?

  • 0
    спасибо maythe4thwithu я пытался после cv :: Mat img = cv :: imread ("lena.jpg"); это: if (img.empty () == true) {std :: cout << "empty image" << endl;} результат был пустым изображением .. является проблемой в расположении изображения или чем конкретно .. вы можете помочь Я пожалуйста
  • 0
    @younestheboss Я могу запустить их (main.cpp, CThinPlateSpline.cpp, CThinPlateSpline.h) на моем Mac с OpenCV 2.4.7, в результате изображение будет искажено Леной.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню