use warpAffine of OpenCV to do image registration
我正在尝试使用 ORB 功能进行图像配准。
我在使用 warpAffine 时遇到了问题。编译器告诉无法将参数 //’1//’ 从 cv::Mat * 转换为 cv::InputArray。
这是我的代码:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#pragma once
// Standard C++ I/O library. // OpenCV library. // OpenCV feature library. // main(). std::string str_ref, str_cmp; // Read reference image. im_ref = cv::imread(str_ref); // Read testing image. im_cmp = cv::imread(str_cmp); std::cout<<"Press any key to continue."<<std::endl; // Feature detection. cv::ORB orb1; // An ORB object. orb1(im_ref, cv::Mat(), key_ref, des_ref); // Feature extraction. // Show keypoints. cvWaitKey(0); // Matching. double max_dist = 0; // Find out the minimum and maximum of all distance. cvWaitKey(0); // Eliminate relatively bad points. // Calculate affine transform matrix. for(int i=0; i<goodMatch.size(); i++) tmpP.x = kgood_cmp[i].pt.x; // Output results. cvWaitKey(0); return 0; |
在使用 Evgeniy 给出的答案之前,我已经得到了结果。
我使用的变换是
1
|
//cv::warpAffine( im_cmp, im_transformed, affine_mat, cv::Size(im_cmp.cols, im_cmp.rows) );
|
转换后的结果很奇怪
我想要做的是最终得到一个参考图像和这个转换图像的合并图像。这实际上是我的第一步。这是使用warpAffine()的转换参数的问题吗?
最后,我想在这里得到一个类似示例的结果(在不同位置拍摄的两张图像,它们最终对齐)
您正在给出一个指针,但 wrapAffine 接受对 cv::Mat 的引用。
您可以像这样更改代码:
1
|
cv::warpAffine(im_cmp, im_transformed, affine_mat, cv::Size(), CV_INTER_LINEAR|CV_WARP_FILL_OUTLIERS);
|
只需删除 ‘
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268967.html