Jump to content
Compvision.ru
megabax

Детекторы особых точек

Recommended Posts

Добрый день.

Поделитесь, пожалуйста примерами различных детекторов особых точек на OpenCV.

Я тут где-то находил вот такой пример Ши Тамаши:

// OpenSVDemo.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace cv;
using namespace std;

/// Global variables
Mat src, src_gray;

int maxCorners = 23;
int maxTrackbar = 100;

RNG rng(12345);
char* source_window = "Image";

/// Function header
void goodFeaturesToTrack_Demo( int, void* );

/**
 * @function main
 */
int main( int argc, char** argv )
{
  /// Load source image and convert it to gray
  //src = imread( argv[1], 1 );
  src = imread("d:\\3\\10300013.png", 1 );
  cvtColor( src, src_gray, CV_BGR2GRAY );

  /// Create Window
  namedWindow( source_window, CV_WINDOW_AUTOSIZE );

  /// Create Trackbar to set the number of corners
  createTrackbar( "Max  corners:", source_window, &maxCorners, maxTrackbar, goodFeaturesToTrack_Demo );

  imshow( source_window, src );

  goodFeaturesToTrack_Demo( 0, 0 );

  waitKey(0);
  return(0);
}

/**
 * @function goodFeaturesToTrack_Demo.cpp
 * @brief Apply Shi-Tomasi corner detector
 */
void goodFeaturesToTrack_Demo( int, void* )
{
  if( maxCorners < 1 ) { maxCorners = 1; }

  /// Parameters for Shi-Tomasi algorithm
  vector<Point2f> corners;
  double qualityLevel = 0.01;
  double minDistance = 10;
  int blockSize = 3;
  bool useHarrisDetector = false;
  double k = 0.04;

  /// Copy the source image
  Mat copy;
  copy = src.clone();

  /// Apply corner detection
  goodFeaturesToTrack( src_gray,
               corners,
               maxCorners,
               qualityLevel,
               minDistance,
               Mat(),
               blockSize,
               useHarrisDetector,
               k );


  /// Draw corners detected
  cout<<"** Number of corners detected: "<<corners.size()<<endl;
  int r = 4;
  for( int i = 0; i < corners.size(); i++ )
     { circle( copy, corners[i], r, Scalar(rng.uniform(0,255), rng.uniform(0,255),
              rng.uniform(0,255)), -1, 8, 0 ); }

  /// Show what you got
  namedWindow( source_window, CV_WINDOW_AUTOSIZE );
  imshow( source_window, copy );
}

но он почему то вылетает на строке cout<<"** Number of corners detected: "<<corners.size()<<endl;

с сообщением:

"

ОС Windows инициировала точку останова в SpecificPoints.exe.
Это может быть вызвано повреждением кучи и указывает на ошибку в SpecificPoints.exe или в одной из загруженных им DLL.
Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит SpecificPoints.exe
Выведенное на экран окно содержит дополнительные данные для диагностики ошибки"
Подскажите пожалуйста, как лечить?

Share this post


Link to post
Share on other sites

Не силен в С++, но думаю что вам нужно переменную corners перевести в другой формат для вывода, например в List<Point>

в джава например так и приходится делать, гонять между List<Point> (для вывода и удобной работы по сортировке) и MatOfPoint2f (для работы функций OpenCV)

Share this post


Link to post
Share on other sites

Вот пример из мануала:

 

Цитата

 


vector<Vec3f> circles;

...

Draw the detected circles:


for( size_t i = 0; i < circles.size(); i++ )
{
   Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
   int radius = cvRound(circles[i][2]);
   // circle center
   circle( src, center, 3, Scalar(0,255,0), -1, 8, 0 );
   // circle outline
   circle( src, center, radius, Scalar(0,0,255), 3, 8, 0 );
 }

 

Вам нужно сделать по аналогии

Share this post


Link to post
Share on other sites

Возможно, возникла путаница в Debug|Release сборках.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×