Shape Transformers and Interfaces OpenCV3.0

北城余情 提交于 2019-11-28 06:16:29

问题


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

回答1:


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.

by LBerger



来源:https://stackoverflow.com/questions/32207085/shape-transformers-and-interfaces-opencv3-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!