形状变压器和接口OpenCV3.0 [英] Shape Transformers and Interfaces OpenCV3.0

查看:92
本文介绍了形状变压器和接口OpenCV3.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图利用OpenCV3.0的新形状转换器和接口.不幸的是,它不能按预期工作.为了确保不会出现任何奇怪的结果并获得奇怪的结果,因此我初始化了一个转换,其中什么也不发生.但是,测试点的转换输出始终为[0,0],并且变形图像始终为全灰色.任何可能出问题的建议都欢迎.

I was trying to make use of the new Shape Transformers and Interfaces of OpenCV3.0. Unfortunately it doesn't work as expected. To ensure not making any fancy warps and getting strange results cause of that reason I initialized a transformation where nothing at all should happen. But output of the transformation for a testpoint is always [0,0] and the warped image is always completley gray. Any suggestions what could be wrong are welcome.

int main(void){

 Mat img1 = imread("C:\\opencv\\sources\\samples\\data\\graf1.png", IMREAD_GRAYSCALE);
 std::vector<cv::Point2f> points1, testpoints;
 vector<DMatch> good_matches;
 Mat respic, resmat;

 points1.push_back(Point(0, 0)); //Corners 800x600 pic
 points1.push_back(Point(799, 0));
 points1.push_back(Point(799, 599));
 points1.push_back(Point(0, 599));

 Mat pointmatrix1(points1);

 good_matches.push_back(DMatch(0, 0, 0));
 good_matches.push_back(DMatch(1, 1, 0));
 good_matches.push_back(DMatch(2, 2, 0));
 good_matches.push_back(DMatch(3, 3, 0));

 testpoints.push_back(Point(250, 250));
 Mat testpointsmat(testpoints);

 // Apply TPS
 Ptr<ThinPlateSplineShapeTransformer> mytps = createThinPlateSplineShapeTransformer(0);
 mytps->estimateTransformation(pointmatrix1, pointmatrix1, good_matches); // Using same pointmatrix nothing should change in res
 mytps->applyTransformation(testpointsmat, resmat);

 cout << "pointmatrix1 = " << endl << " " << pointmatrix1 << endl << endl;
 cout << "testpointsmat = " << endl << " " << testpointsmat << endl << endl;
 cout << "resmat = " << endl << " " << resmat << endl << endl; //Always [0,0] ?

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

 mytps->warpImage(img1, respic);

 imwrite("Tranformed.png", respic);
 imshow("Tranformed", respic); //Always completley grey ?

 waitKey(0);

 return 0;
}

推荐答案

不要问我为什么,但是如果我添加这两行,它将起作用.

Don't ask me why but if I add this two lines it works.

// Apply TPS
transpose(pointmatrix1, pointmatrix1); // ADD
transpose(testpoints, testpoints); // ADD
Ptr<ThinPlateSplineShapeTransformer> mytps = createThinPlateSplineShapeTransformer(0);

现在,源代码代码中有些奇怪的地方在这里为什么是列而不是行.

Now There is something strange in source code here why cols and not rows.

作者LBerger

这篇关于形状变压器和接口OpenCV3.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆