Форум программистов, компьютерный форум CyberForum.ru

Идентификаторы: createHanningWindow и phaseCorrelate не найдены - C++

Восстановить пароль Регистрация
 
Mustang_Mus
3 / 3 / 0
Регистрация: 31.07.2014
Сообщений: 17
31.07.2014, 22:29     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #1
Пытался скомпилировать демку

C++
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
#include "opencv2/core/core.hpp"
 
#include "opencv2/highgui/highgui.hpp"
 
#include "opencv2/imgproc/imgproc.hpp"
 
using namespace cv;
 
int main(int, char* [])
 
 { 
 
// Создание видеопотока с камеры 
 
VideoCapture video(0);
 
Mat frame, curr, prev, curr64f, prev64f, hann;
 
int key = 0;
 
do
{
    video >> frame; // Очередной фрейм
    cvtColor(frame, curr, CV_RGB2GRAY); // Перевод в градации серого
 
    if(prev.empty())
    {
        prev = curr.clone(); // клонирование изображения
        createHanningWindow(hann, curr.size(), CV_64F); // Создание окна Ханна
    }
 
    prev.convertTo(prev64f, CV_64F); 
    curr.convertTo(curr64f, CV_64F);
 
    Point2d shift = phaseCorrelate(prev64f, curr64f, hann); // Фазовая корреляция
    double radius = cv::sqrt(shift.x*shift.x + shift.y*shift.y); // Вычисление радиуса отклонения
 
    if(radius > 5)
    {
        // вывод на экран окружности и направления смещения
        Point center(curr.cols >> 1, curr.rows >> 1);
        cv::circle(frame, center, (int)radius, cv::Scalar(0, 255, 0), 3, CV_AA);
        cv::line(frame, center, Point(center.x + (int)shift.x, center.y + (int)shift.y), cv::Scalar(0, 255, 0), 3, CV_AA);
    }
 
    imshow("phase shift", frame);
    key = waitKey(2);
 
    prev = curr.clone();
} while((char)key != 27); // Esc to exit...
 
return 0;
 
}
Но Visual Studio не смог найти идентификаторы createHanningWindow и phaseCorrelate. Подскажите пожалуйста, в чём может быть проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2014, 03:40     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #2
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
Но Visual Studio не смог найти идентификаторы createHanningWindow и phaseCorrelate.
...
Миниатюры
Идентификаторы: createHanningWindow и phaseCorrelate не найдены  
Mustang_Mus
3 / 3 / 0
Регистрация: 31.07.2014
Сообщений: 17
01.08.2014, 14:53  [ТС]     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #3
А какая у Вас версия OpenCV? Просто на одном форуме было высказано предположение, что эта функция была добавлена в версии 2.4.0, а у меня 2.3.1
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.08.2014, 15:03     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #4
Mustang_Mus, может просто либу надо прилинковать?
Mustang_Mus
3 / 3 / 0
Регистрация: 31.07.2014
Сообщений: 17
01.08.2014, 15:10  [ТС]     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #5
Добавил линковки для всех необходимых модулей, как написано тут:
http://robocraft.ru/blog/computervision/700.html

В итоге получилось вот что:

C++
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
    
    #include "stdafx.h"
 
    #include <opencv2/opencv.hpp>
 
    #ifdef _MSC_VER
    # if CV_MAJOR_VERSION == 2 && CV_MINOR_VERSION == 3 && CV_SUBMINOR_VERSION == 1
    // OpenCV 2.3.1
    #  if defined(_DEBUG)
    #  pragma comment(lib, "opencv_core231d.lib")
    #  pragma comment(lib, "opencv_highgui231d.lib")
    #  pragma comment(lib, "opencv_imgproc231d.lib")
    #  pragma comment(lib, "opencv_video231d.lib")
    #  pragma comment(lib, "opencv_ml231d.lib")
 
    #  pragma comment(lib, "opencv_calib3d231d.lib")
    #  pragma comment(lib, "opencv_objdetect231d.lib")
    #  pragma comment(lib, "opencv_features2d231d.lib")
    #  pragma comment(lib, "opencv_contrib231d.lib")
    #  pragma comment(lib, "opencv_ts231d.lib")
    #  pragma comment(lib, "opencv_legacy231d.lib")
    #  pragma comment(lib, "opencv_flann231d.lib")
    #  pragma comment(lib, "opencv_gpu231d.lib")
    # else
    #  pragma comment(lib, "opencv_core231.lib")
    #  pragma comment(lib, "opencv_highgui231.lib")
    #  pragma comment(lib, "opencv_imgproc231.lib")
    #  pragma comment(lib, "opencv_video231.lib")
    #  pragma comment(lib, "opencv_ml231.lib")
 
    #  pragma comment(lib, "opencv_calib3d231.lib")
    #  pragma comment(lib, "opencv_objdetect231.lib")
    #  pragma comment(lib, "opencv_features2d231.lib")
    #  pragma comment(lib, "opencv_contrib231.lib")
    #  pragma comment(lib, "opencv_ts231.lib")
    #  pragma comment(lib, "opencv_legacy231.lib")
    #  pragma comment(lib, "opencv_flann231.lib")
    #  pragma comment(lib, "opencv_gpu231.lib")
    # endif //#  if defined(_DEBUG)
 
    # endif //# if CV_MAJOR_VERSION == 2 && CV_MINOR_VERSION == 3
    #endif //#ifdef _MSC_VER
 
 
    #include "opencv2/core/core.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
 
    using namespace cv;
 
    int main(int, char* [])
    {
        // Создание видеопотока с камеры
        VideoCapture video(0);
        Mat frame, curr, prev, curr64f, prev64f, hann;
        int key = 0;
 
        do
        {
            video >> frame; // Очередной фрейм
            cvtColor(frame, curr, CV_RGB2GRAY); // Перевод в градации серого
 
            if(prev.empty())
            {
                prev = curr.clone(); // клонирование изображения
                createHanningWindow(hann, curr.size(), CV_64F); // Создание окна Ханна
            }
 
            prev.convertTo(prev64f, CV_64F);
            curr.convertTo(curr64f, CV_64F);
 
            Point2d shift = phaseCorrelate(prev64f, curr64f, hann); // Фазовая корреляция
            double radius = cv::sqrt(shift.x*shift.x + shift.y*shift.y); // Вычисление радиуса отклонения
 
            if(radius > 5)
            {
                // вывод на экран окружности и направления смещения
                Point center(curr.cols >> 1, curr.rows >> 1);
                cv::circle(frame, center, (int)radius, cv::Scalar(0, 255, 0), 3, CV_AA);
                cv::line(frame, center, Point(center.x + (int)shift.x, center.y + (int)shift.y), cv::Scalar(0, 255, 0), 3, CV_AA);
            }
 
            imshow("phase shift", frame);
            key = waitKey(2);
 
            prev = curr.clone();
        } while((char)key != 27); // Esc to exit...
 
        return 0;
    }
А компилятор всё равно выдаёт те же ошибки:
error C3861: createHanningWindow: идентификатор не найден
error C3861: phaseCorrelate: идентификатор не найден
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2014, 20:15     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #6
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
Просто на одном форуме было высказано предположение, что эта функция была добавлена в версии 2.4.0, а у меня 2.3.1
Ну так, установите и проверьте. Какая у меня - без понятия (я ей не пользуюсь). Если судить по числам в названиях либ (246), то, наверное, 2.4.
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
А компилятор всё равно выдаёт те же ошибки:
error C3861: createHanningWindow: идентификатор не найден
error C3861: phaseCorrelate: идентификатор не найден
Они у меня в файле imgproc.hpp. Откройте и посмотрите. Если нет - значит другая версия.

Добавлено через 3 минуты
Цитата Сообщение от Tulosba Посмотреть сообщение
может просто либу надо прилинковать?
Тогда студия по-другому пишет, а не:
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
не смог найти идентификаторы
Mustang_Mus
3 / 3 / 0
Регистрация: 31.07.2014
Сообщений: 17
01.08.2014, 22:52  [ТС]     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #7
Нашёл гайд по установке OpenCV 2.4.2 в Visual Studio 2010
http://gerasimchuk.blogspot.ru/2012/08/ ... ess-c.html

Сделал всё, как там. Но чувстувую, что чего-то всё же не хватает, потому что на демку, приведённую в конце гайда, компилятор отвечает ошибкой инициализации приложения 0xc0150002.


C++ (Qt)
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
    
 #include "stdafx.h"
 
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    IplImage* frame=cvLoadImage("C:\\Users\\Василий\\Desktop\\2.jpg",1);
 
    cvSmooth(frame,frame,CV_BLUR,3,0,2.0,2.0); // Немножко размоем изображение. Просто так,
                                                   //чтобы потрогать функции OpenCV
 
    if(frame==NULL){ /* Если вдруг такой картинки нет */
        printf("Кажется этот файл не существует");
        exit(0);
    }
 
    cvNamedWindow("Hi", CV_WINDOW_AUTOSIZE );
    cvShowImage("My Window",frame);
    cvSaveImage("image.jpg",frame);
     
    cvWaitKey();/* Ждем, пока вы что-нибудь не нажмете, 
                       иначе окошко просто "мелькнет" и вы
                       можете даже ничего не заметить */
    cvDestroyWindow( "Hi" );
 
return 0;
}

"OpenCV_HelloWorld.exe": Загружено: "C:\Documents and Settings\User\Мои документы\Visual Studio 2010\Projects\OpenCV_HelloWorld\Debug\OpenCV_HelloWorld.exe", Символы загружены.
"OpenCV_HelloWorld.exe": Загружено: "C:\WINDOWS\system32\ntdll.dll", Невозможно найти или открыть файл PDB
"OpenCV_HelloWorld.exe": Загружено: "C:\WINDOWS\system32\kernel32.dll", Невозможно найти или открыть файл PDB
"OpenCV_HelloWorld.exe": Загружено: "C:\OpenCV\build\x86\vc9\bin\opencv_imgproc242d.dll", Невозможно найти или открыть файл PDB
LDR: LdrpWalkImportDescriptor() failed to probe C:\opencv\build\x86\vc9\bin\opencv_imgproc242d.dll for its manifest, ntstatus 0xc0150002
Отладчик: в процессе загрузки возникло необработанное исключение, не допускающее продолжение
Программа "[3756] OpenCV_HelloWorld.exe: Машинный код" завершилась с кодом -1072365566 (0xc0150002).

Долго мучился с переустановками .net framework, но ничего не помогает. Что же опять нужно VS, чтобы нормально работать?(
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2014, 23:09     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #8
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
на демку, приведённую в конце гайда, компилятор отвечает ошибкой инициализации приложения 0xc0150002.
А на код в первом посте?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2014, 23:57     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #9
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
на демку, приведённую в конце гайда
C++
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
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
 
int main()
{
    setlocale(0, "");
    
    IplImage* frame=cvLoadImage("2.jpg",1);
 
    cvSmooth(frame,frame,CV_BLUR,3,0,2.0,2.0); // Немножко размоем изображение. Просто так,
                                                   //чтобы потрогать функции OpenCV
 
    if(frame==NULL){ /* Если вдруг такой картинки нет */
        printf("Кажется этот файл не существует");
        exit(0);
    }
 
    cvNamedWindow("Hi", CV_WINDOW_AUTOSIZE );
    cvShowImage("My Window",frame);
    cvSaveImage("image.jpg",frame);
     
    cvWaitKey();/* Ждем, пока вы что-нибудь не нажмете, 
                       иначе окошко просто "мелькнет" и вы
                       можете даже ничего не заметить */
    cvDestroyWindow( "Hi" );
 
return 0;
}
Миниатюры
Идентификаторы: createHanningWindow и phaseCorrelate не найдены  
Mustang_Mus
3 / 3 / 0
Регистрация: 31.07.2014
Сообщений: 17
02.08.2014, 05:24  [ТС]     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #10
Что за чудеса.
А на демку из первого поста то же самое:

"4.exe": Загружено: "C:\Documents and Settings\User\Мои документы\Visual Studio 2010\Projects\4\Debug\4.exe", Символы загружены.
"4.exe": Загружено: "C:\WINDOWS\system32\ntdll.dll", Невозможно найти или открыть файл PDB
"4.exe": Загружено: "C:\WINDOWS\system32\kernel32.dll", Невозможно найти или открыть файл PDB
"4.exe": Загружено: "C:\OpenCV\build\x86\vc9\bin\opencv_core242d.dll", Невозможно найти или открыть файл PDB
LDR: LdrpWalkImportDescriptor() failed to probe C:\opencv\build\x86\vc9\bin\opencv_core242d.dll for its manifest, ntstatus 0xc0150002
Отладчик: в процессе загрузки возникло необработанное исключение, не допускающее продолжение
Программа "[2152] 4.exe: Машинный код" завершилась с кодом -1072365566 (0xc0150002).

Закрались сомнения по поводу tbb. Я читал, что с ним нужно что-то сделать и куда-то закинуть. А я не делал и не закидывал. Может быть проблема в нём? А что с ним точно нужно сделать?

Добавлено через 5 часов 12 минут
УРААААААААААААА, СКОМПИЛИЛОООСЬ!!!! УРАААААААААААААААААААААААА

Короче, проблема решилась так:
1) В переменную среды PATH добавил путь к либам dll: путь_к_opencv\build\x86\vc10\bin
2) Скачал с http://threadingbuildingblocks.org/ последний TBB. Распаковал архив и скопировал с замещением все файлы из каталога bin\ia32\ в директорию C:\opencv\build\common\tbb\ (в числе прочих там был и искомый tbb_debug.dll).
3) Добавил в переменную среды PATH путь C:\opencv\build\common\tbb\ia32\vc10\

Скомпилился и пример из гайда, и пример из первого поста. Детально пока искомый пример из первого поста не разбирал – главное хотя бы скомпилилось Буду тыркаться дальше. Большое спасибо всем за участие в решении
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2014, 05:40     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #11
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
СКОМПИЛИЛОООСЬ!!!!
А до этого разве не компилировалось? Вот это ошибки запуска скомпилированного кода, а не компиляции:
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
"OpenCV_HelloWorld.exe": Загружено: "C:\Documents and Settings\User\Мои документы\Visual Studio 2010\Projects\OpenCV_HelloWorld\Debug\OpenCV_HelloWorld.exe" , Символы загружены.
"OpenCV_HelloWorld.exe": Загружено: "C:\WINDOWS\system32\ntdll.dll", Невозможно найти или открыть файл PDB
"OpenCV_HelloWorld.exe": Загружено: "C:\WINDOWS\system32\kernel32.dll", Невозможно найти или открыть файл PDB
"OpenCV_HelloWorld.exe": Загружено: "C:\OpenCV\build\x86\vc9\bin\opencv_imgproc242d.dll", Невозможно найти или открыть файл PDB
LDR: LdrpWalkImportDescriptor() failed to probe C:\opencv\build\x86\vc9\bin\opencv_imgproc242d.dll for its manifest, ntstatus 0xc0150002
Отладчик: в процессе загрузки возникло необработанное исключение, не допускающее продолжение
Программа "[3756] OpenCV_HelloWorld.exe: Машинный код" завершилась с кодом -1072365566 (0xc0150002).
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
В переменную среды PATH добавил путь к либам dll: путь_к_opencv\build\x86\vc10\bin
Нужные dll просто нужно добавить в папку проекта (если запуск из студии), или положить рядом с .exe (если делается праямой запуск .exe).
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
(в числе прочих там был и искомый tbb_debug.dll).
Откуда это появилось - что для работы этого кода нужен некий tbb? Первый раз про него слышу, и у меня всё работает.
Mustang_Mus
3 / 3 / 0
Регистрация: 31.07.2014
Сообщений: 17
02.08.2014, 16:25  [ТС]     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #12
Если добавить в переменную среды, то не нужно каждый раз выбирать и подкладывать dll'ки.
А про tbb было указано во всех гайдах по установке OpenCV, что я видел.
http://robocraft.ru/blog/computervision/700.html
http://gerasimchuk.blogspot.ru/2012/...express-c.html
И, кстати, без tbb у меня были ошибки с dll и с OpenCV, стоявшей до этого.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2014, 17:53     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #13
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
Если добавить в переменную среды, то не нужно каждый раз выбирать и подкладывать dll'ки.
Если на другом компе запускать exe, то кто будет прописывать пути?
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
И, кстати, без tbb у меня были ошибки с dll и с OpenCV, стоявшей до этого.
До этого были ошибки компиляции, а не запуска (до запуска дело не доходило). И насчёт dll понятно почему были, уже с новой OpenCV (путь же к ним не был прописан? Или был и до этого прописан?).
А где, в ваших выложенных ошибках, есть сообщение о том, что не найден tbb_debug.dll?
Mustang_Mus
3 / 3 / 0
Регистрация: 31.07.2014
Сообщений: 17
02.08.2014, 23:20  [ТС]     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #14
Если на другом компе запускать exe, то кто будет прописывать пути?
Отличное замечание! Вот об этом я не подумал.

Сначала у меня стояла версия 2.3.1 с установленным, как описывалось, tbb и прописанными путями.
Потом я поставил 2.4.2 и ничего не прописывал, и не скачивал, поэтому выдавались ошибки с dll.
Сейчас мне это удалось исправить, и ошибки с dll, слава Богу, больше не выдаются.
Почему нужен именно tbb_debug.dll я, честно, сказать не могу, но в обоих гайдах он фигурирует как очень важная штука. Можно ещё, я читал, не закидывать файлы из каталога bin\ia32\ распакованного архива tbb в директорию C:\opencv\build\common\tbb\ и добавлять путь в переменную среды, а взять из скачанного архива файл tbb_debug.dll и положить в папку с программой. Но так я ещё не пробовал. Надо будет поэкспериментировать с добавлением в папку с файлом .exe нужных dll'лок
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.08.2014, 02:51     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #15
Цитата Сообщение от Mustang_Mus Посмотреть сообщение
Почему нужен именно tbb_debug.dll я, честно, сказать не могу, но в обоих гайдах он фигурирует как очень важная штука.
По второй ссылке, кстати, в самом гайде ничего про tbb нет (в одном коментарии пишут).
Т.е., никаких ошибок, при запуске, по поводу tbb_debug.dll у вас не было? Я правильно понял? Как насчёт этого ("очень важной штуки")?
Цитата Сообщение от alsav22 Посмотреть сообщение
Первый раз про него слышу, и у меня всё работает.
Добавлено через 32 минуты
Понял, почему:
Цитата Сообщение от alsav22 Посмотреть сообщение
Первый раз про него слышу, и у меня всё работает.
В пакете openCV 2.4.6 нет папки tbb (в 2.3.1 - есть). Интересно, почему вы установили 2.4.2, а не последнюю: 2.4.9 (в которой, кстати, тоже нет папки tbb) ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2014, 18:04     Идентификаторы: createHanningWindow и phaseCorrelate не найдены
Еще ссылки по теме:

C++ Идентификаторы
Cygwin и NetBeans - В системе подходящие компиляторы не найдены C++
Идентификаторы интерфейсов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mustang_Mus
3 / 3 / 0
Регистрация: 31.07.2014
Сообщений: 17
03.08.2014, 18:04  [ТС]     Идентификаторы: createHanningWindow и phaseCorrelate не найдены #16
По поводу tbb_debug.dll ошибок не было. Но ошибки с нахождением других dll были.
Я хотел сначала поставить 2.4.9, но, увидев, что сформирована она несколько иначе, чем 2.3.1, решил поискать гайды по установке 2.4.9. Но нашёл только 2.4.2. Поскольку основной задачей было поставить версию 2.4.+, то я поставил 2.4.2.
Yandex
Объявления
03.08.2014, 18:04     Идентификаторы: createHanningWindow и phaseCorrelate не найдены
Ответ Создать тему
Опции темы

Текущее время: 22:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru