精确检测角点函数cvFindCornerSubPix的demo

转载自:http://blog.csdn.net/moc062066/article/details/6634961

cvFindCornerSubPix利用cvGoodFeaturesToTrack检测出来的角点的基础上,能够将角点位置精确到亚像素级精度。

cvGoodFeaturesToTrack的使用可以参考这里。

[cpp]  view plain copy
  1. //cvFindCornersSubPix_demo.cpp  
  2. //http://blog.csdn.net/moc062066  
  3. //2011.07.26  
  4.   
  5. #include <stdio.h>  
  6. #include <cv.h>  
  7. #include <cxcore.h>  
  8. #include <highgui.h>  
  9.   
  10.   
  11. #pragma comment(lib, "opencv_core220d.lib")  
  12. #pragma comment(lib, "opencv_highgui220d.lib")  
  13. #pragma comment(lib, "opencv_imgproc220d.lib")  
  14.   
  15.   
  16.   
  17. int main(int argc, char** argv)  
  18. {  
  19.     FILE* fp = fopen("d:\\result.txt","w+" ) ;  
  20.     const char* filename = "D:\\mochen_WIN32\\opencv\\CH10\\one_way_train_0001.jpg" ;  
  21.     //const char* windowname = "http://blog.csdn.net/moc062066" ;  
  22.   
  23.     //img AND img_copy is the same,use to draw different result   
  24.     IplImage* img = cvLoadImage(filename,CV_LOAD_IMAGE_COLOR );  
  25.     IplImage* img_copy = cvCloneImage( img ) ;//a copy of img  
  26.     IplImage* img_gray = cvCreateImage(cvGetSize( img ),IPL_DEPTH_8U, 1) ;  
  27.     IplImage* eig_image = cvCreateImage(cvGetSize( img ),IPL_DEPTH_32F, 1);  
  28.     IplImage* temp_image = cvCloneImage( eig_image ) ;  
  29.   
  30.     cvCvtColor(img,img_gray,CV_BGR2GRAY);  
  31.   
  32.     const int MAX_CORNERS = 1000 ;  
  33.     CvPoint2D32f* corners = new CvPoint2D32f[ MAX_CORNERS ];  
  34.     int corner_count = MAX_CORNERS;  
  35.     double quality_level = 0.1; //OR 0.01  
  36.     double min_distance = 5;  
  37.   
  38.     cvGoodFeaturesToTrack(  
  39.         img_gray,  
  40.         eig_image,           
  41.         temp_image,  
  42.         corners,  
  43.         &corner_count,  
  44.         quality_level,  
  45.         min_distance  
  46.     );  
  47.   
  48.     //draw corners from cvGoodFeaturesToTrack on "img"  
  49.     for (int i = 0 ; i < corner_count ; ++i){  
  50.         cvLine(   
  51.             img,  
  52.             cvPoint(corners[i].x,corners[i].y) ,  
  53.             cvPoint(corners[i].x,corners[i].y),  
  54.             CV_RGB(255,0,0),  
  55.             5  
  56.         );  
  57.         fprintf(fp,"\t%f\t%f\n",corners[i].x,corners[i].y) ;  
  58.     }  
  59.       
  60.     fprintf(fp,"\n\n\n\n\n") ;  
  61.   
  62.     int half_win_size = 3;//the window size will be 3+1+3=7  
  63.     int iteration = 20;  
  64.     double epislon = 0.1;  
  65.   
  66.     cvFindCornerSubPix(  
  67.         img_gray,  
  68.         corners,  
  69.         corner_count,  
  70.         cvSize(half_win_size,half_win_size),  
  71.         cvSize(-1,-1),//no ignoring the neighbours of the center corner  
  72.         cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,iteration,epislon)  
  73.         );  
  74.   
  75.     //draw subpix corners on "img_copy"  
  76.     for (int i=0;i<corner_count;i++){  
  77.         cvLine(   
  78.             img_copy,  
  79.             cvPoint(corners[i].x,corners[i].y) ,  
  80.             cvPoint(corners[i].x,corners[i].y),  
  81.             CV_RGB(255,0,0),  
  82.             5  
  83.         );  
  84.         fprintf(fp,"\t%f\t%f\n",corners[i].x,corners[i].y) ;  
  85.     }  
  86.   
  87.     cvNamedWindow("cvFindCornerSubPix", CV_WINDOW_AUTOSIZE );  
  88.     cvShowImage( "cvFindCornerSubPix", img );  
  89.     cvNamedWindow("cvGoodFeaturesToTrack", CV_WINDOW_AUTOSIZE );  
  90.     cvShowImage( "cvGoodFeaturesToTrack", img_copy );  
  91.   
  92.   
  93.     cvWaitKey(0);  
  94.   
  95.     cvReleaseImage(&img_gray);  
  96.     cvReleaseImage(&img);  
  97.     cvReleaseImage(&img_copy);  
  98.     cvDestroyWindow("cvGoodFeaturesToTrack");  
  99.     cvDestroyWindow("cvFindCornerSubPix");  
  100.   
  101.     return 0;  
  102. }  

结果:

精确检测角点函数cvFindCornerSubPix的demo_第1张图片



还可以看看具体的位置差别:

[cpp]  view plain copy
  1. 226 177     223.979004  177.954727  
  2. 246 457     246.342575  458.441925  
  3. 206 217     205.988937  217.017212  
  4. 63  233     61.92979    231.779572  
  5. 59  239     57.358231   237.760956  
  6. 476 127     476.999207  126.51577  
  7. 244 230     244.378113  231.000763  
  8. 329 261     328.071289  261.544617  
  9. 41  253     39.679108   251.516586  
  10. 449 206     450.561768  205.385559  
  11. 298 116     297.48111   115.146233  
  12. 57  249     58.309151   250.528427  
  13. 65  259     63.784649   257.482605  
  14. 56  233     57.358143   231.902939  
  15. 480 265     481.90155   264.144104  
  16. 40  266     39.356575   265.407654  
  17. 282 151     280.037598  152.058228  
  18. 37  247     37.105995   245.344711  
  19. 391 103     393.433319  101.992729  
  20. 242 141     242.607422  141.100433  
  21. 186 258     187.336563  257.453247  
  22. 374 279     373.053436  277.157898  
  23. 55  259     53.271538   257.877075  
  24. 69  242     69.2658 244.048813  
  25. 260 67      259.071808  67.505707  
  26. 50  252     49.351063   250.887909  
  27. 356 323     355.215271  323.20282  
  28. 37  260     37.986225   258.311005  
  29. 336 127     337.292725  126.324081  
  30. 320 163     320.452179  163.841644  
  31. 305 203     303.238556  204.069641  
  32. 51  267     49.322056   265.451752  
  33. 46  246     44.387882   244.464386  
  34. 423 150     421.249329  150.734589  
  35. 64  245     62.19445    243.746231  
  36. 50  239     48.513313   238.295792  
  37. 365 60      366.504028  59.652817  
  38. 189 209     187.248123  209.612976  
  39. 60  266     59.270794   265.092224  
  40. 262 191     262.622223  190.768219  
  41. 288 5       287.563843  4.65015  
  42. 70  252     69.444695   249.886948  
  43. 421 293     419.476837  293.755798  
  44. 389 233     389.720612  233.096863  
  45. 510 178     508.495789  178.653564  
  46. 513 327     513.642883  326.605164  
  47. 285 246     285.041473  245.707077  
  48. 42  243     44.218742   244.554565  
  49. 74  271     74.592758   271.931274  
  50. 265 290     266.595428  289.260986  
  51. 45  259     43.965206   258.221985  
  52. 445 81      446.234833  80.587486  
  53. 262 105     260.089722  105.417213  
  54. 38  238     39.463673   239.081985  
  55. 179 477     178.42366   478.361267  
  56. 294 349     292.825348  349.096405  
  57. 291 43      291.821869  42.637604  
  58. 277 72      277.381744  72.414444  
  59. 466 309     466.518738  310.26712  
  60. 310 306     309.965088  305.939087  
  61. 361 178     362.592712  177.057404  
  62. 69  265     68.396118   264.394745  
  63. 65  271     64.174408   272.556793  
  64. 226 274     225.409454  272.912567  
  65. 346 219     345.795349  218.329971  
  66. 464 163     464.552094  164.572495  
  67. 70  237     70.615662   236.817734  
  68. 74  298     74.548515   296.672241  
  69. 402 340     402.264862  340.515778  
  70. 435 247     435.498627  248.511307  
  71. 68  306     68.562714   305.116577  
  72. 528 279     528.224304  279.99704  
  73. 60  256     58.378197   257.673218  
  74. 451 357     449.710205  357.786896  
  75. 226 134     224.146622  134.863815  
  76. 406 190     406.038696  190.735214  
  77. 312 82      313.823181  81.432472  
  78. 337 366     337.767242  366.91449  
  79. 432 402     432.503906  403.237396  
  80. 34  235     35.783943   233.398193  
  81. 72  333     72  333  
  82. 63  227     62.944881   225.204498  
  83. 72  303     72.011215   304.445038  
  84. 497 373     497.65799   374.472382  
  85. 210 313     208.663559  313.423889  
  86. 387 385     385.418671  385.524963  
  87. 39  272     39  272  
  88. 68  300     68  300  
  89. 573 294     573.499817  295.692657  
  90. 68  319     69.112984   318.079987  
  91. 72  312     72.112968   310.587891  
  92. 170 295     170.060715  296.296753  
  93. 378 137     378.369995  137.953888  
  94. 61  335     60.104778   334.017151  
  95. 40  228     40.901752   226.912415  
  96. 66  311     66.144821   311.928802  
  97. 434 112     434.703094  113.567688  
  98. 353 92      352.966858  91.11277  
  99. 53  327     53.927685   328.156189  
  100. 56  227     57.43726    225.764465  
  101. 72  323     74.141632   323.789276  
  102. 277 424     277 424  
  103. 58  307     57.944839   307.864197  
  104. 58  329     58.423988   327.466278  
  105. 294 458     295.407806  459.466583  
  106. 50  259     49.397194   258.418549  
  107. 60  302     60  302  
  108. 47  234     47.988354   232.771988  
  109. 330 52      329.634888  50.872742  
  110. 48  227     50.580132   226.629684  
  111. 293 429     291.427155  427.723633  
  112. 61  319     60.054024   320.291595  
  113. 279 6       279.202332  4.682604  
  114. 55  264     54.053097   265.40564  
  115. 55  243     53.70647    243.994568  
  116. 152 288     151.368958  288.24527  
  117. 70  338     68.620132   339.708984  
  118. 561 154     562.112 153.836777  
  119. 298 467     296.016693  465.889954  
  120. 129 144     130.049789  143.166763  
  121. 542 237     541.159363  235.351898  
  122. 248 329     248.618698  330.610992  
  123. 559 343     559.828735  342.710571  
  124. 169 252     168.375534  250.124008  
  125. 494 221     495.947693  220.213699  
  126. 528 105     528.884766  104.912086  
  127. 73  318     73.327011   317.454468  
  128. 145 477     145 477  
  129. 48  272     49.243771   273.165466  
  130. 58  343     59.737438   341.331635  
  131. 552 192     552.329285  193.175949  
  132. 587 250     585.283508  251.023361  
  133. 521 139     519.62085   139.533493  
  134. 188 376     188 376  
  135. 161 477     160.223663  478.555725  
  136. 286 438     287.129913  439.437408  
  137. 528 435     528.64801   436.565552  
  138. 53  304     53  304  
  139. 64  327     64.307709   326.131226  
  140. 206 173     205.530167  172.02626  
  141. 53  321     52.927059   322.150146  
  142. 290 453     289.464203  451.641998  
  143. 283 425     284.591217  425.801331  
  144. 59  272     59.303421   272.722107  
  145. 2   195     0.55171 194.967331  
  146. 594 209     595.181274  208.285736  
  147. 50  309     50.056606   310.088776  
  148. 594 301     594.44751   302.387329  
  149. 110 465     112.678375  464.216278  
  150. 105 301     105.904839  299.43158  
  151. 58  313     59.005356   313.973969  
  152. 580 351     581.15625   350.483337  
  153. 65  347     64.425552   348.0896  
  154. 284 368     285.773041  367.813232  
  155. 242 102     241.573944  100.385773  
  156. 543 391     544.625549  390.523132  
  157. 54  272     53.65321    272.630188  
  158. 120 477     120 477  
  159. 65  339     63.423409   340.927551  
  160. 489 94      488.384949  92.754433  
  161. 65  332     63.918072   333.602203  
  162. 26  266     25.558767   264.518463  
  163. 291 401     289.508911  400.552765  
  164. 141 433     141 433  
  165. 161 434     161.566635  432.378479  
  166. 143 427     144.209717  424.16922  
  167. 144 453     146.34552   450.987305  
  168. 50  315     49.960327   316.33371  
  169. 65  207     66.250748   207.832001  
  170. 158 407     158 407  
  171. 282 461     283.567688  460.905243  
  172. 53  337     54.0564 334.985413  
  173. 638 291     638.365051  291.364532  
  174. 34  477     32.855476   478.484039  
  175. 162 413     162 413  
  176. 274 40      274.129211  38.520088  
  177. 41  277     41  277  
  178. 407 71      406.617126  70.229546  
  179. 95  477     95.162102   478.559387  
  180. 133 477     133 477  
  181. 225 390     226.661194  389.679596  
  182. 603 169     603.631226  168.46019  
  183. 146 467     144.850479  464.238312  
  184. 174 383     174.595169  382.531189  
  185. 112 325     111.867439  326.299652  
  186. 194 388     194 388  
  187. 58  348     58.941166   349.243073  
  188. 156 453     157.918381  454.864227  
  189. 615 213     615.423035  214.50383  
  190. 178 398     178.002335  397.914215  
  191. 116 473     117.430855  470.287781  
  192. 47  329     46.515869   329.850739  
  193. 44  307     44.659878   305.491821  
  194. 160 457     157.926819  459.669403  
  195. 148 415     150.416962  417.023529  
  196. 145 290     143.436157  290.277985  
  197. 109 474     109 474  
  198. 118 447     117.039696  446.002502  
  199. 139 469     139 469  
  200. 138 445     140.743973  444.947571  
  201. 160 310     159.202484  309.343964  
  202. 153 467     152.075958  468.852844  
  203. 137 455     134.443466  455.724915  
  204. 484 420     482.420044  421.416656  
  205. 143 448     140.511902  445.754517  
  206. 622 176     622.9776    174.712143  
  207. 154 448     154 448  
  208. 150 306     151.808548  305.681183  
  209. 30  277     30.737091   279.031219  
  210. 136 439     136 439  
  211. 165 449     162.291138  450.282227  
  212. 191 395     191.669235  392.0336  
  213. 2   229     0.359053    229.453705  
  214. 95  306     93.769638   306.755463  
  215. 303 477     303.275635  478.525665  
  216. 176 389     176 389  
  217. 140 477     139.243103  478.506836  
  218. 149 455     149 455  
  219. 97  438     95.075996   438.308624  
  220. 638 285     638.268433  284.668304  
  221. 292 477     292 477  
  222. 188 401     185.619461  400.684967  
  223. 70  227     70  227  
  224. 126 419     126 419  
  225. 143 438     143 438  
  226. 610 133     611.076111  132.721558  
  227. 172 440     172 440  
  228. 24  247     24.90378    247.919006  
  229. 158 419     158 419  
  230. 566 397     566.452209  398.134277  
  231. 121 410     119.065735  410.2771  
  232. 33  252     33.511356   251.844849  
  233. 180 381     178.197098  379.613708  
  234. 126 452     126 452  
  235. 183 393     182.582108  392.361359  
  236. 131 437     131 437  
  237. 151 420     150.32756   417.153473  
  238. 128 477     126.419952  478.534943  
  239. 138 429     138 429  
  240. 166 394     166.871658  395.072937  
  241. 217 367     217 367  
  242. 172 394     170.262985  391.322693  
  243. 133 451     134.923233  449.34375  
  244. 135 298     136.869858  298.207581  
  245. 131 446     131 446  
  246. 113 454     111.401466  453.746399  
  247. 142 399     143.115082  397.244324  
  248. 144 462     145.246246  464.354553  
  249. 132 462     130.169952  459.457245  
  250. 182 420     182.27916   419.063446  
  251. 170 388     170 388  
  252. 8   255     8.042757    256.647827  
  253. 605 259     605.310486  257.383911  
  254. 102 468     100.057426  467.894165  
  255. 76  155     74.387268   155.617752  
  256. 2   174     0.527431    173.877594  
  257. 185 427     185 427  
  258. 161 463     161 463  
  259. 280 28      280 28  
  260. 118 461     116.281197  461.59375  
  261. 198 393     198 393  
  262. 140 362     140.18956   361.06958  
  263. 77  345     75.254028   346.954712  
  264. 45  323     46.802341   323.090698  
  265. 156 414     154.80864   411.225403  
  266. 107 461     105.771194  460.097656  
  267. 115 467     115 467  
  268. 107 434     107 434  
  269. 572 121     570.835999  119.155617  
  270. 153 478     151.811005  478.576996  
  271. 122 466     124.632881  466.831177  
  272. 173 445     171.83699   442.292023  
  273. 131 406     132.519928  403.895569  
  274. 207 394     208.327072  392.170074  
  275. 124 440     122.428673  439.951691  
  276. 176 327     177.730301  326.282715  
  277. 176 403     174.62149   400.221405  
  278. 83  453     82.17395    452.288971  
  279. 194 407     192.251038  405.181671  
  280. 144 303     144.42923   301.771515  
  281. 173 399     173 399  
  282. 88  458     88  458  
  283. 128 459     130.425415  458.998322  
  284. 78  460     76.168289   459.321838  
  285. 182 401     184.579971  400.85202  
  286. 5   242     3.816916    243.952225  
  287. 169 411     169 411  
  288. 302 442     302 442  
  289. 82  464     82  464  
  290. 128 402     127.028763  401.395264  
  291. 109 423     108.082031  422.247162  
  292. 115 417     113.579552  416.254883  
  293. 42  331     42  331  
  294. 167 400     167 400  
  295. 201 397     201 397  
  296. 90  446     88.533951   445.079132  
  297. 30  304     28.948282   305.937805  
  298. 121 451     123.440361  448.574249  
  299. 104 429     102.435143  428.326569  
  300. 118 421     118 421  
  301. 36  277     36  277  
  302. 52  344     54.155262   342.375519  
  303. 119 221     119 221  
  304. 155 473     155 473  
  305. 22  254     22  254  
  306. 70  469     68.035934   469.233368  
  307. 172 477     169.329987  478.596527  
  308. 151 460     153.50676   461.944519  
  309. 48  337     50.156414   335.978241  
  310. 215 384     215.199768  385.493744  
  311. 181 387     181 387  
  312. 106 443     106 443  
  313. 278 419     276.92392   419.238892  
  314. 42  319     42  319  
  315. 149 447     150.125107  449.818298  
  316. 190 421     190 421  
  317. 228 360     230.534348  361.441376  
  318. 6   247     4.255842    245.215683  
  319. 185 406     185 406  
  320. 95  331     95.585266   329.267426  
  321. 124 471     124 471  
  322. 46  344     46.258667   343.305542  
  323. 139 460     139 460  
  324. 93  450     93  450  
  325. 184 440     184 440  
  326. 153 409     154.891968  411.116425  
  327. 20  235     20  235  
  328. 139 420     138.211136  420.432587  
  329. 82  477     80.268921   478.45166  
  330. 102 448     102 448  
  331. 24  275     24  275  
  332. 276 457     275.921661  457.222351  
  333. 192 477     192 477  
  334. 634 135     634 135  
  335. 212 390     212 390  
  336. 314 477     314.638733  478.578766  
  337. 179 437     180.079559  436.389618  
  338. 307 405     308.8909    405.719025  
  339. 75  340     74.390884   338.975739  
  340. 150 363     148.123001  363.714539  
  341. 324 448     325.662994  448.72998  
  342. 113 427     113 427  
  343. 133 467     131.354553  464.375366  
  344. 195 415     195.793442  414.296265  
  345. 555 449     554.767761  450.06488  
  346. 53  288     52.229633   289.30661  
  347. 126 243     124.381767  242.674225  
  348. 306 446     306 446  
  349. 302 464     303.366913  465.364105  
  350. 50  349     50.666424   350.814087  
  351. 301 437     299.912231  435.25946  
  352. 21  229     18.846128   227.009109  
  353. 593 335     592.243591  335.971527  
  354. 41  314     41  314  
  355. 157 400     154.883865  400.263031  
  356. 303 470     305.244904  471.695343  
  357. 22  269     22  269  
  358. 22  240     22  240  
  359. 132 396     130.897324  395.369934  
  360. 81  243     78.946297   241.783127  
  361. 297 477     297 477  
  362. 288 445     288.517487  444.895172  
  363. 299 432     299 432  
  364. 168 320     169.037354  318.091766  
  365. 284 374     284 374  
  366. 122 457     121.275467  454.710907  
  367. 88  298     88  298  
  368. 171 316     169.500443  317.163361  
  369. 130 415     130 415  
  370. 225 340     225 340  
  371. 84  254     83.076866   256.995026  
  372. 103 145     103 145  
  373. 221 361     221 361  

你可能感兴趣的:(精确检测角点函数cvFindCornerSubPix的demo)