cvFindCornerSubPix利用cvGoodFeaturesToTrack检测出来的角点的基础上,能够将角点位置精确到亚像素级精度。
cvGoodFeaturesToTrack的使用可以参考这里。
//cvFindCornersSubPix_demo.cpp //http://blog.csdn.net/moc062066 //2011.07.26 #include <stdio.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> #pragma comment(lib, "opencv_core220d.lib") #pragma comment(lib, "opencv_highgui220d.lib") #pragma comment(lib, "opencv_imgproc220d.lib") int main(int argc, char** argv) { FILE* fp = fopen("d:\\result.txt","w+" ) ; const char* filename = "D:\\mochen_WIN32\\opencv\\CH10\\one_way_train_0001.jpg" ; //const char* windowname = "http://blog.csdn.net/moc062066" ; //img AND img_copy is the same,use to draw different result IplImage* img = cvLoadImage(filename,CV_LOAD_IMAGE_COLOR ); IplImage* img_copy = cvCloneImage( img ) ;//a copy of img IplImage* img_gray = cvCreateImage(cvGetSize( img ),IPL_DEPTH_8U, 1) ; IplImage* eig_image = cvCreateImage(cvGetSize( img ),IPL_DEPTH_32F, 1); IplImage* temp_image = cvCloneImage( eig_image ) ; cvCvtColor(img,img_gray,CV_BGR2GRAY); const int MAX_CORNERS = 1000 ; CvPoint2D32f* corners = new CvPoint2D32f[ MAX_CORNERS ]; int corner_count = MAX_CORNERS; double quality_level = 0.1; //OR 0.01 double min_distance = 5; cvGoodFeaturesToTrack( img_gray, eig_image, temp_image, corners, &corner_count, quality_level, min_distance ); //draw corners from cvGoodFeaturesToTrack on "img" for (int i = 0 ; i < corner_count ; ++i){ cvLine( img, cvPoint(corners[i].x,corners[i].y) , cvPoint(corners[i].x,corners[i].y), CV_RGB(255,0,0), 5 ); fprintf(fp,"\t%f\t%f\n",corners[i].x,corners[i].y) ; } fprintf(fp,"\n\n\n\n\n") ; int half_win_size = 3;//the window size will be 3+1+3=7 int iteration = 20; double epislon = 0.1; cvFindCornerSubPix( img_gray, corners, corner_count, cvSize(half_win_size,half_win_size), cvSize(-1,-1),//no ignoring the neighbours of the center corner cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,iteration,epislon) ); //draw subpix corners on "img_copy" for (int i=0;i<corner_count;i++){ cvLine( img_copy, cvPoint(corners[i].x,corners[i].y) , cvPoint(corners[i].x,corners[i].y), CV_RGB(255,0,0), 5 ); fprintf(fp,"\t%f\t%f\n",corners[i].x,corners[i].y) ; } cvNamedWindow("cvFindCornerSubPix", CV_WINDOW_AUTOSIZE ); cvShowImage( "cvFindCornerSubPix", img ); cvNamedWindow("cvGoodFeaturesToTrack", CV_WINDOW_AUTOSIZE ); cvShowImage( "cvGoodFeaturesToTrack", img_copy ); cvWaitKey(0); cvReleaseImage(&img_gray); cvReleaseImage(&img); cvReleaseImage(&img_copy); cvDestroyWindow("cvGoodFeaturesToTrack"); cvDestroyWindow("cvFindCornerSubPix"); return 0; }
还可以看看具体的位置差别:
226 177 223.979004 177.954727 246 457 246.342575 458.441925 206 217 205.988937 217.017212 63 233 61.92979 231.779572 59 239 57.358231 237.760956 476 127 476.999207 126.51577 244 230 244.378113 231.000763 329 261 328.071289 261.544617 41 253 39.679108 251.516586 449 206 450.561768 205.385559 298 116 297.48111 115.146233 57 249 58.309151 250.528427 65 259 63.784649 257.482605 56 233 57.358143 231.902939 480 265 481.90155 264.144104 40 266 39.356575 265.407654 282 151 280.037598 152.058228 37 247 37.105995 245.344711 391 103 393.433319 101.992729 242 141 242.607422 141.100433 186 258 187.336563 257.453247 374 279 373.053436 277.157898 55 259 53.271538 257.877075 69 242 69.2658 244.048813 260 67 259.071808 67.505707 50 252 49.351063 250.887909 356 323 355.215271 323.20282 37 260 37.986225 258.311005 336 127 337.292725 126.324081 320 163 320.452179 163.841644 305 203 303.238556 204.069641 51 267 49.322056 265.451752 46 246 44.387882 244.464386 423 150 421.249329 150.734589 64 245 62.19445 243.746231 50 239 48.513313 238.295792 365 60 366.504028 59.652817 189 209 187.248123 209.612976 60 266 59.270794 265.092224 262 191 262.622223 190.768219 288 5 287.563843 4.65015 70 252 69.444695 249.886948 421 293 419.476837 293.755798 389 233 389.720612 233.096863 510 178 508.495789 178.653564 513 327 513.642883 326.605164 285 246 285.041473 245.707077 42 243 44.218742 244.554565 74 271 74.592758 271.931274 265 290 266.595428 289.260986 45 259 43.965206 258.221985 445 81 446.234833 80.587486 262 105 260.089722 105.417213 38 238 39.463673 239.081985 179 477 178.42366 478.361267 294 349 292.825348 349.096405 291 43 291.821869 42.637604 277 72 277.381744 72.414444 466 309 466.518738 310.26712 310 306 309.965088 305.939087 361 178 362.592712 177.057404 69 265 68.396118 264.394745 65 271 64.174408 272.556793 226 274 225.409454 272.912567 346 219 345.795349 218.329971 464 163 464.552094 164.572495 70 237 70.615662 236.817734 74 298 74.548515 296.672241 402 340 402.264862 340.515778 435 247 435.498627 248.511307 68 306 68.562714 305.116577 528 279 528.224304 279.99704 60 256 58.378197 257.673218 451 357 449.710205 357.786896 226 134 224.146622 134.863815 406 190 406.038696 190.735214 312 82 313.823181 81.432472 337 366 337.767242 366.91449 432 402 432.503906 403.237396 34 235 35.783943 233.398193 72 333 72 333 63 227 62.944881 225.204498 72 303 72.011215 304.445038 497 373 497.65799 374.472382 210 313 208.663559 313.423889 387 385 385.418671 385.524963 39 272 39 272 68 300 68 300 573 294 573.499817 295.692657 68 319 69.112984 318.079987 72 312 72.112968 310.587891 170 295 170.060715 296.296753 378 137 378.369995 137.953888 61 335 60.104778 334.017151 40 228 40.901752 226.912415 66 311 66.144821 311.928802 434 112 434.703094 113.567688 353 92 352.966858 91.11277 53 327 53.927685 328.156189 56 227 57.43726 225.764465 72 323 74.141632 323.789276 277 424 277 424 58 307 57.944839 307.864197 58 329 58.423988 327.466278 294 458 295.407806 459.466583 50 259 49.397194 258.418549 60 302 60 302 47 234 47.988354 232.771988 330 52 329.634888 50.872742 48 227 50.580132 226.629684 293 429 291.427155 427.723633 61 319 60.054024 320.291595 279 6 279.202332 4.682604 55 264 54.053097 265.40564 55 243 53.70647 243.994568 152 288 151.368958 288.24527 70 338 68.620132 339.708984 561 154 562.112 153.836777 298 467 296.016693 465.889954 129 144 130.049789 143.166763 542 237 541.159363 235.351898 248 329 248.618698 330.610992 559 343 559.828735 342.710571 169 252 168.375534 250.124008 494 221 495.947693 220.213699 528 105 528.884766 104.912086 73 318 73.327011 317.454468 145 477 145 477 48 272 49.243771 273.165466 58 343 59.737438 341.331635 552 192 552.329285 193.175949 587 250 585.283508 251.023361 521 139 519.62085 139.533493 188 376 188 376 161 477 160.223663 478.555725 286 438 287.129913 439.437408 528 435 528.64801 436.565552 53 304 53 304 64 327 64.307709 326.131226 206 173 205.530167 172.02626 53 321 52.927059 322.150146 290 453 289.464203 451.641998 283 425 284.591217 425.801331 59 272 59.303421 272.722107 2 195 0.55171 194.967331 594 209 595.181274 208.285736 50 309 50.056606 310.088776 594 301 594.44751 302.387329 110 465 112.678375 464.216278 105 301 105.904839 299.43158 58 313 59.005356 313.973969 580 351 581.15625 350.483337 65 347 64.425552 348.0896 284 368 285.773041 367.813232 242 102 241.573944 100.385773 543 391 544.625549 390.523132 54 272 53.65321 272.630188 120 477 120 477 65 339 63.423409 340.927551 489 94 488.384949 92.754433 65 332 63.918072 333.602203 26 266 25.558767 264.518463 291 401 289.508911 400.552765 141 433 141 433 161 434 161.566635 432.378479 143 427 144.209717 424.16922 144 453 146.34552 450.987305 50 315 49.960327 316.33371 65 207 66.250748 207.832001 158 407 158 407 282 461 283.567688 460.905243 53 337 54.0564 334.985413 638 291 638.365051 291.364532 34 477 32.855476 478.484039 162 413 162 413 274 40 274.129211 38.520088 41 277 41 277 407 71 406.617126 70.229546 95 477 95.162102 478.559387 133 477 133 477 225 390 226.661194 389.679596 603 169 603.631226 168.46019 146 467 144.850479 464.238312 174 383 174.595169 382.531189 112 325 111.867439 326.299652 194 388 194 388 58 348 58.941166 349.243073 156 453 157.918381 454.864227 615 213 615.423035 214.50383 178 398 178.002335 397.914215 116 473 117.430855 470.287781 47 329 46.515869 329.850739 44 307 44.659878 305.491821 160 457 157.926819 459.669403 148 415 150.416962 417.023529 145 290 143.436157 290.277985 109 474 109 474 118 447 117.039696 446.002502 139 469 139 469 138 445 140.743973 444.947571 160 310 159.202484 309.343964 153 467 152.075958 468.852844 137 455 134.443466 455.724915 484 420 482.420044 421.416656 143 448 140.511902 445.754517 622 176 622.9776 174.712143 154 448 154 448 150 306 151.808548 305.681183 30 277 30.737091 279.031219 136 439 136 439 165 449 162.291138 450.282227 191 395 191.669235 392.0336 2 229 0.359053 229.453705 95 306 93.769638 306.755463 303 477 303.275635 478.525665 176 389 176 389 140 477 139.243103 478.506836 149 455 149 455 97 438 95.075996 438.308624 638 285 638.268433 284.668304 292 477 292 477 188 401 185.619461 400.684967 70 227 70 227 126 419 126 419 143 438 143 438 610 133 611.076111 132.721558 172 440 172 440 24 247 24.90378 247.919006 158 419 158 419 566 397 566.452209 398.134277 121 410 119.065735 410.2771 33 252 33.511356 251.844849 180 381 178.197098 379.613708 126 452 126 452 183 393 182.582108 392.361359 131 437 131 437 151 420 150.32756 417.153473 128 477 126.419952 478.534943 138 429 138 429 166 394 166.871658 395.072937 217 367 217 367 172 394 170.262985 391.322693 133 451 134.923233 449.34375 135 298 136.869858 298.207581 131 446 131 446 113 454 111.401466 453.746399 142 399 143.115082 397.244324 144 462 145.246246 464.354553 132 462 130.169952 459.457245 182 420 182.27916 419.063446 170 388 170 388 8 255 8.042757 256.647827 605 259 605.310486 257.383911 102 468 100.057426 467.894165 76 155 74.387268 155.617752 2 174 0.527431 173.877594 185 427 185 427 161 463 161 463 280 28 280 28 118 461 116.281197 461.59375 198 393 198 393 140 362 140.18956 361.06958 77 345 75.254028 346.954712 45 323 46.802341 323.090698 156 414 154.80864 411.225403 107 461 105.771194 460.097656 115 467 115 467 107 434 107 434 572 121 570.835999 119.155617 153 478 151.811005 478.576996 122 466 124.632881 466.831177 173 445 171.83699 442.292023 131 406 132.519928 403.895569 207 394 208.327072 392.170074 124 440 122.428673 439.951691 176 327 177.730301 326.282715 176 403 174.62149 400.221405 83 453 82.17395 452.288971 194 407 192.251038 405.181671 144 303 144.42923 301.771515 173 399 173 399 88 458 88 458 128 459 130.425415 458.998322 78 460 76.168289 459.321838 182 401 184.579971 400.85202 5 242 3.816916 243.952225 169 411 169 411 302 442 302 442 82 464 82 464 128 402 127.028763 401.395264 109 423 108.082031 422.247162 115 417 113.579552 416.254883 42 331 42 331 167 400 167 400 201 397 201 397 90 446 88.533951 445.079132 30 304 28.948282 305.937805 121 451 123.440361 448.574249 104 429 102.435143 428.326569 118 421 118 421 36 277 36 277 52 344 54.155262 342.375519 119 221 119 221 155 473 155 473 22 254 22 254 70 469 68.035934 469.233368 172 477 169.329987 478.596527 151 460 153.50676 461.944519 48 337 50.156414 335.978241 215 384 215.199768 385.493744 181 387 181 387 106 443 106 443 278 419 276.92392 419.238892 42 319 42 319 149 447 150.125107 449.818298 190 421 190 421 228 360 230.534348 361.441376 6 247 4.255842 245.215683 185 406 185 406 95 331 95.585266 329.267426 124 471 124 471 46 344 46.258667 343.305542 139 460 139 460 93 450 93 450 184 440 184 440 153 409 154.891968 411.116425 20 235 20 235 139 420 138.211136 420.432587 82 477 80.268921 478.45166 102 448 102 448 24 275 24 275 276 457 275.921661 457.222351 192 477 192 477 634 135 634 135 212 390 212 390 314 477 314.638733 478.578766 179 437 180.079559 436.389618 307 405 308.8909 405.719025 75 340 74.390884 338.975739 150 363 148.123001 363.714539 324 448 325.662994 448.72998 113 427 113 427 133 467 131.354553 464.375366 195 415 195.793442 414.296265 555 449 554.767761 450.06488 53 288 52.229633 289.30661 126 243 124.381767 242.674225 306 446 306 446 302 464 303.366913 465.364105 50 349 50.666424 350.814087 301 437 299.912231 435.25946 21 229 18.846128 227.009109 593 335 592.243591 335.971527 41 314 41 314 157 400 154.883865 400.263031 303 470 305.244904 471.695343 22 269 22 269 22 240 22 240 132 396 130.897324 395.369934 81 243 78.946297 241.783127 297 477 297 477 288 445 288.517487 444.895172 299 432 299 432 168 320 169.037354 318.091766 284 374 284 374 122 457 121.275467 454.710907 88 298 88 298 171 316 169.500443 317.163361 130 415 130 415 225 340 225 340 84 254 83.076866 256.995026 103 145 103 145 221 361 221 361