transform - 形状更改器(mutator)和接口(interface) OpenCV3.0

标签 transform shapes opencv3.0 spline

我试图利用 OpenCV3.0 的新形状转换器和接口(interface)。不幸的是它没有按预期工作。为了确保不会产生任何花哨的扭曲并因此而得到奇怪的结果,我初始化了一个根本不应该发生任何事情的转换。但测试点的变换输出始终为 [0,0],并且扭曲图像始终为完全灰色。欢迎提出任何可能错误的建议。

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;
}

最佳答案

不要问我为什么,但如果我添加这两行它就可以了。

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

现在源代码中有一些奇怪的东西code here为什么是列而不是行。

by LBerger

关于transform - 形状更改器(mutator)和接口(interface) OpenCV3.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32207085/

相关文章:

javascript - 使用 CSS 变换缩放 <div> 容器

python - 在 OSX 中为 python3 安装 opencv3

c++ - OpenCV col-wise 标准偏差结果与 MATLAB

html - 仅使用 CSS 加载时如何缩放元素?

css - 过渡不是第一次发生

xml - 如何用xslt转换xml并在Android webview中显示

java - Java 的形状识别算法/代码

pandas dataframe 传递值的形状为 (1, 4),索引暗示 (4, 4)

java - 使用Andengine画圆

c++ - 如何使用opencv_contrib编译Opencv3.2.0