РЕДАКТИРОВАТЬ: Я приобрел достаточно репутации через этот пост, чтобы иметь возможность редактировать его с помощью дополнительных ссылок, что поможет мне получить свою точку зрения на лучшее
Люди, играющие в привязке Исаака, часто сталкиваются с важными элементами на маленьких постамах. /> < /p>
Цель состоит в том, чтобы пользователь запутался в том, какой элемент сможет нажать кнопку, которая затем поручит ему «поставить» элемент (подумайте о боксе на рабочем столе Windows). Коробка дает нам область интереса (фактический элемент плюс некоторая фоновая среда) для сравнения с тем, что будет целой сеткой предметов. < /p>
Теоретический элемент пользовательского блока
< /p>
Теоретическая сетка (я не так много, что я не знаю, что это не так, как это не так, я просто />
Место в сетке элементов, идентифицированное как элемент, который в котором пользователь -блокировка будет представлять определенную область на изображении, которое коррелирует с собственной ссылкой, которая будет представлять собой/piki, которая будет представлять собой/piki, который будет представлять (с ими, которая будет представлять собой/pik. />
В сетке элемент - 1 -й столбец 3 -й из нижнего ряда. Я использую эти два изображения во всех вещах, которые я пробовал ниже < /p>
Моя цель - создать программу, которая может взять ручной культуру предмета из игры «Связывание Isaac», определить обрезанный элемент, обнаружив, что сравнивая изображение с изображением таблицы элементов в игре, затем отображает правильный Wiki. Было бы моим первым «настоящим проектом» в том смысле, что требует огромного количества библиотеки, чтобы получить то, что я хочу сделать. Это было немного ошеломляюще. (Вы можете быстро найти учебники, которые я использовал, поиск имени метода и OpenCV. Моя учетная запись сильно ограничена публикацией ссылок по какой -то причине) />http://docs.opencv.org/doc/tutoriors/fe ... ption.html
#include
#include
#include "opencv2/core/core.hpp"
#include
#include
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
void readme();
/** @function main */
int main( int argc, char** argv )
{
if( argc != 3 )
{ return -1; }
Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
Mat img_2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
if( !img_1.data || !img_2.data )
{ return -1; }
//-- Step 1: Detect the keypoints using SURF Detector
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
std::vector keypoints_1, keypoints_2;
detector.detect( img_1, keypoints_1 );
detector.detect( img_2, keypoints_2 );
//-- Step 2: Calculate descriptors (feature vectors)
SurfDescriptorExtractor extractor;
Mat descriptors_1, descriptors_2;
extractor.compute( img_1, keypoints_1, descriptors_1 );
extractor.compute( img_2, keypoints_2, descriptors_2 );
//-- Step 3: Matching descriptor vectors with a brute force matcher
BruteForceMatcher< L2 > matcher;
std::vector< DMatch > matches;
matcher.match( descriptors_1, descriptors_2, matches );
//-- Draw matches
Mat img_matches;
drawMatches( img_1, keypoints_1, img_2, keypoints_2, matches, img_matches );
//-- Show detected matches
imshow("Matches", img_matches );
waitKey(0);
return 0;
}
/** @function readme */
void readme()
{ std::cout
Результаты не так полезны. Чистые, но одинаково ненадежные результаты, используя Flann.
http://docs.opencv.org/doc/tutorials/fe ... er.htmlbr/>
#include
#include
#include "opencv2/core/core.hpp"
#include
#include
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
void readme();
/** @function main */
int main( int argc, char** argv )
{
if( argc != 3 )
{ readme(); return -1; }
Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
Mat img_2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
if( !img_1.data || !img_2.data )
{ std::cout max_dist ) max_dist = dist;
}
printf("-- Max dist : %f \n", max_dist );
printf("-- Min dist : %f \n", min_dist );
//-- Draw only "good" matches (i.e. whose distance is less than 2*min_dist )
//-- PS.- radiusMatch can also be used here.
std::vector< DMatch > good_matches;
for( int i = 0; i < descriptors_1.rows; i++ )
{ if( matches.distance < 2*min_dist )
{ good_matches.push_back( matches); }
}
//-- Draw only "good" matches
Mat img_matches;
drawMatches( img_1, keypoints_1, img_2, keypoints_2,
good_matches, img_matches, Scalar::all(-1), Scalar::all(-1),
vector(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
//-- Show detected matches
imshow( "Good Matches", img_matches );
for( int i = 0; i < good_matches.size(); i++ )
{ printf( "-- Good Match [%d] Keypoint 1: %d -- Keypoint 2: %d \n", i, good_matches.queryIdx, good_matches.trainIdx ); }
waitKey(0);
return 0;
}
/** @function readme */
void readme()
{ std::cout
TemplateMatching - мой лучший метод. Из 6 методов он варьируется от получения только 0-4 правильных идентификаций.#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include
#include
using namespace std;
using namespace cv;
/// Global Variables
Mat img; Mat templ; Mat result;
char* image_window = "Source Image";
char* result_window = "Result window";
int match_method;
int max_Trackbar = 5;
/// Function Headers
void MatchingMethod( int, void* );
/** @function main */
int main( int argc, char** argv )
{
/// Load image and template
img = imread( argv[1], 1 );
templ = imread( argv[2], 1 );
/// Create windows
namedWindow( image_window, CV_WINDOW_AUTOSIZE );
namedWindow( result_window, CV_WINDOW_AUTOSIZE );
/// Create Trackbar
char* trackbar_label = "Method: \n 0: SQDIFF \n 1: SQDIFF NORMED \n 2: TM CCORR \n 3: TM CCORR NORMED \n 4: TM COEFF \n 5: TM COEFF NORMED";
createTrackbar( trackbar_label, image_window, &match_method, max_Trackbar, MatchingMethod );
MatchingMethod( 0, 0 );
waitKey(0);
return 0;
}
/**
* @function MatchingMethod
* @brief Trackbar callback
*/
void MatchingMethod( int, void* )
{
/// Source image to display
Mat img_display;
img.copyTo( img_display );
/// Create the result matrix
int result_cols = img.cols - templ.cols + 1;
int result_rows = img.rows - templ.rows + 1;
result.create( result_cols, result_rows, CV_32FC1 );
/// Do the Matching and Normalize
matchTemplate( img, templ, result, match_method );
normalize( result, result, 0, 1, NORM_MINMAX, -1, Mat() );
/// Localizing the best match with minMaxLoc
double minVal; double maxVal; Point minLoc; Point maxLoc;
Point matchLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
/// For SQDIFF and SQDIFF_NORMED, the best matches are lower values. For all the other methods, the higher the better
if( match_method == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED )
{ matchLoc = minLoc; }
else
{ matchLoc = maxLoc; }
/// Show me what you got
rectangle( img_display, matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), Scalar::all(0), 2, 8, 0 );
rectangle( result, matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), Scalar::all(0), 2, 8, 0 );
imshow( image_window, img_display );
imshow( result_window, result );
return;
}
< /code>
https://i.sstatic.net/ncbpw.png
из 6
Fail, пройти, пройти, пройти, пройти, пройти < /p>
Это был лучший результат. Следующий элемент, который я попробовал, был < /p>
и результаты с провалом, провал, провал, пройденный, провал < /p>
из пункта, что все это работает, и некоторые из них, что не так, как некоторые из них, и некоторые из них, и некоторые из них, что некоторые из них не будут. ужасно < /p>
Поэтому я спрошу: Является ли Templatematching моей лучшей ставки или есть метод, который я не рассматриваю, это будет мой святой Грааль? Документация OpenCV об этом действительно плохая, и примерами, которые я нахожу в Интернете, являются чрезвычайно старые CPP или прямой c. < /P>
Спасибо за любую помощь. Это предприятие до сих пор было интересным опытом. Мне пришлось лишить все ссылки, которые лучше изобразили бы, как все работает, но сайт говорит, что я публикую более 10 ссылок, даже когда я не. Такие элементы, как Rock, являются причиной, по которой обрезка элемента по пользователю является лучшим способом изоляции элемента, в противном случае их позиции находятся только в нескольких конкретных местах. Описание изображения здесь "src =" https://i.sstatic.net/ucy8x.png "/>
Предмет после боя с боссом, много вещей повсюду и прозрачность в середине. Я предполагаю, что это одно из самых сложных для правильной работы < /p>
< /p>
< /p>
Вот две таблицы. />
Подробнее здесь: https://stackoverflow.com/questions/147 ... dentificat
Использование OpenCV в соответствии с изображением из группы изображений с целью идентификации в C ++ ⇐ C++
Программы на C++. Форум разработчиков
1756040967
Anonymous
РЕДАКТИРОВАТЬ: Я приобрел достаточно репутации через этот пост, чтобы иметь возможность редактировать его с помощью дополнительных ссылок, что поможет мне получить свою точку зрения на лучшее
Люди, играющие в привязке Исаака, часто сталкиваются с важными элементами на маленьких постамах. /> < /p>
Цель состоит в том, чтобы пользователь запутался в том, какой элемент сможет нажать кнопку, которая затем поручит ему «поставить» элемент (подумайте о боксе на рабочем столе Windows). Коробка дает нам область интереса (фактический элемент плюс некоторая фоновая среда) для сравнения с тем, что будет целой сеткой предметов. < /p>
Теоретический элемент пользовательского блока
< /p>
Теоретическая сетка (я не так много, что я не знаю, что это не так, как это не так, я просто />
Место в сетке элементов, идентифицированное как элемент, который в котором пользователь -блокировка будет представлять определенную область на изображении, которое коррелирует с собственной ссылкой, которая будет представлять собой/piki, которая будет представлять собой/piki, который будет представлять (с ими, которая будет представлять собой/pik. />
В сетке элемент - 1 -й столбец 3 -й из нижнего ряда. Я использую эти два изображения во всех вещах, которые я пробовал ниже < /p>
Моя цель - создать программу, которая может взять ручной культуру предмета из игры «Связывание Isaac», определить обрезанный элемент, обнаружив, что сравнивая изображение с изображением таблицы элементов в игре, затем отображает правильный Wiki. Было бы моим первым «настоящим проектом» в том смысле, что требует огромного количества библиотеки, чтобы получить то, что я хочу сделать. Это было немного ошеломляюще. (Вы можете быстро найти учебники, которые я использовал, поиск имени метода и OpenCV. Моя учетная запись сильно ограничена публикацией ссылок по какой -то причине) />http://docs.opencv.org/doc/tutoriors/features2d/feature_description/feature_description.html
#include
#include
#include "opencv2/core/core.hpp"
#include
#include
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
void readme();
/** @function main */
int main( int argc, char** argv )
{
if( argc != 3 )
{ return -1; }
Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
Mat img_2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
if( !img_1.data || !img_2.data )
{ return -1; }
//-- Step 1: Detect the keypoints using SURF Detector
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
std::vector keypoints_1, keypoints_2;
detector.detect( img_1, keypoints_1 );
detector.detect( img_2, keypoints_2 );
//-- Step 2: Calculate descriptors (feature vectors)
SurfDescriptorExtractor extractor;
Mat descriptors_1, descriptors_2;
extractor.compute( img_1, keypoints_1, descriptors_1 );
extractor.compute( img_2, keypoints_2, descriptors_2 );
//-- Step 3: Matching descriptor vectors with a brute force matcher
BruteForceMatcher< L2 > matcher;
std::vector< DMatch > matches;
matcher.match( descriptors_1, descriptors_2, matches );
//-- Draw matches
Mat img_matches;
drawMatches( img_1, keypoints_1, img_2, keypoints_2, matches, img_matches );
//-- Show detected matches
imshow("Matches", img_matches );
waitKey(0);
return 0;
}
/** @function readme */
void readme()
{ std::cout
Результаты не так полезны. Чистые, но одинаково ненадежные результаты, используя Flann.
http://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.htmlbr/>
#include
#include
#include "opencv2/core/core.hpp"
#include
#include
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
void readme();
/** @function main */
int main( int argc, char** argv )
{
if( argc != 3 )
{ readme(); return -1; }
Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
Mat img_2 = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
if( !img_1.data || !img_2.data )
{ std::cout max_dist ) max_dist = dist;
}
printf("-- Max dist : %f \n", max_dist );
printf("-- Min dist : %f \n", min_dist );
//-- Draw only "good" matches (i.e. whose distance is less than 2*min_dist )
//-- PS.- radiusMatch can also be used here.
std::vector< DMatch > good_matches;
for( int i = 0; i < descriptors_1.rows; i++ )
{ if( matches[i].distance < 2*min_dist )
{ good_matches.push_back( matches[i]); }
}
//-- Draw only "good" matches
Mat img_matches;
drawMatches( img_1, keypoints_1, img_2, keypoints_2,
good_matches, img_matches, Scalar::all(-1), Scalar::all(-1),
vector(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
//-- Show detected matches
imshow( "Good Matches", img_matches );
for( int i = 0; i < good_matches.size(); i++ )
{ printf( "-- Good Match [%d] Keypoint 1: %d -- Keypoint 2: %d \n", i, good_matches[i].queryIdx, good_matches[i].trainIdx ); }
waitKey(0);
return 0;
}
/** @function readme */
void readme()
{ std::cout
TemplateMatching - мой лучший метод. Из 6 методов он варьируется от получения только 0-4 правильных идентификаций.#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include
#include
using namespace std;
using namespace cv;
/// Global Variables
Mat img; Mat templ; Mat result;
char* image_window = "Source Image";
char* result_window = "Result window";
int match_method;
int max_Trackbar = 5;
/// Function Headers
void MatchingMethod( int, void* );
/** @function main */
int main( int argc, char** argv )
{
/// Load image and template
img = imread( argv[1], 1 );
templ = imread( argv[2], 1 );
/// Create windows
namedWindow( image_window, CV_WINDOW_AUTOSIZE );
namedWindow( result_window, CV_WINDOW_AUTOSIZE );
/// Create Trackbar
char* trackbar_label = "Method: \n 0: SQDIFF \n 1: SQDIFF NORMED \n 2: TM CCORR \n 3: TM CCORR NORMED \n 4: TM COEFF \n 5: TM COEFF NORMED";
createTrackbar( trackbar_label, image_window, &match_method, max_Trackbar, MatchingMethod );
MatchingMethod( 0, 0 );
waitKey(0);
return 0;
}
/**
* @function MatchingMethod
* @brief Trackbar callback
*/
void MatchingMethod( int, void* )
{
/// Source image to display
Mat img_display;
img.copyTo( img_display );
/// Create the result matrix
int result_cols = img.cols - templ.cols + 1;
int result_rows = img.rows - templ.rows + 1;
result.create( result_cols, result_rows, CV_32FC1 );
/// Do the Matching and Normalize
matchTemplate( img, templ, result, match_method );
normalize( result, result, 0, 1, NORM_MINMAX, -1, Mat() );
/// Localizing the best match with minMaxLoc
double minVal; double maxVal; Point minLoc; Point maxLoc;
Point matchLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
/// For SQDIFF and SQDIFF_NORMED, the best matches are lower values. For all the other methods, the higher the better
if( match_method == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED )
{ matchLoc = minLoc; }
else
{ matchLoc = maxLoc; }
/// Show me what you got
rectangle( img_display, matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), Scalar::all(0), 2, 8, 0 );
rectangle( result, matchLoc, Point( matchLoc.x + templ.cols , matchLoc.y + templ.rows ), Scalar::all(0), 2, 8, 0 );
imshow( image_window, img_display );
imshow( result_window, result );
return;
}
< /code>
https://i.sstatic.net/ncbpw.png
из 6
Fail, пройти, пройти, пройти, пройти, пройти < /p>
Это был лучший результат. Следующий элемент, который я попробовал, был < /p>
и результаты с провалом, провал, провал, пройденный, провал < /p>
из пункта, что все это работает, и некоторые из них, что не так, как некоторые из них, и некоторые из них, и некоторые из них, что некоторые из них не будут. ужасно < /p>
Поэтому я спрошу: Является ли Templatematching моей лучшей ставки или есть метод, который я не рассматриваю, это будет мой святой Грааль? Документация OpenCV об этом действительно плохая, и примерами, которые я нахожу в Интернете, являются чрезвычайно старые CPP или прямой c. < /P>
Спасибо за любую помощь. Это предприятие до сих пор было интересным опытом. Мне пришлось лишить все ссылки, которые лучше изобразили бы, как все работает, но сайт говорит, что я публикую более 10 ссылок, даже когда я не. Такие элементы, как Rock, являются причиной, по которой обрезка элемента по пользователю является лучшим способом изоляции элемента, в противном случае их позиции находятся только в нескольких конкретных местах. Описание изображения здесь "src =" https://i.sstatic.net/ucy8x.png "/>
Предмет после боя с боссом, много вещей повсюду и прозрачность в середине. Я предполагаю, что это одно из самых сложных для правильной работы < /p>
< /p>
< /p>
Вот две таблицы. />
Подробнее здесь: [url]https://stackoverflow.com/questions/14743389/using-opencv-to-match-an-image-from-a-group-of-images-for-purpose-of-identificat[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия