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

Каскады хаара - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Распознавание лиц с OpenCv http://www.cyberforum.ru/cpp-beginners/thread332327.html
Всем доброго времени суток. Помогите пожалуйста решить проблему поиска лица в видеопотоке. Теории начатался, знаю что нужно OpenCv и каскады Хоара использовать, но как пока не знаю, пожалуйста кто не равнодушен, буду весьма признателен.
C++ Прямоугольник на экране Всем привет!:) как можно сделать в DirectDraw так, чтобы например через 30 секунд появился прямоугольник на экране и например через 10 секунд исчез с экрана? и еще выложите пожалуйста примеры? http://www.cyberforum.ru/cpp-beginners/thread332320.html
перемещение посредством "Key" C++
Здравствуйте. Подскажите пожалуйста, какой код надо написать, чтобы в программе с помощью кнопки LeftKeyDown, RightKeyDown можно было перемещать по горизонтали компонент Animate?
Поиск путей с минимальной суммой цифр C++
Задание: В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N), чтобы сумма цифр в клетках, через которые он пролегает, была минимальной; из любой клетки ходить можно только вниз или вправо. Ввод В первой строке находится число N (2 ≤ N ≤ 250). В следующих N строках содержатся по N цифр без пробелов. Вывод...
C++ файлы.массив строк. http://www.cyberforum.ru/cpp-beginners/thread332266.html
Привет! Требуется составить программу, которая обрабатывает заданный входной файл и записывает результаты в два выходных файла. Вх файл содержит массив строк. Вых файл 1 содержит отсортированный по алфавиту массив неповторяющихся строк, а вых файл 2 содержит повторяющиеся строки из вх файла с указанием количества повторений. Имя вх и путь к вых файлам задается в виде двух параметров командной...
C++ Про Borland C++ Компилятор ВС++ работает на OS 7 ? подробнее

Показать сообщение отдельно
~GiPeRPrOgEr~
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 85
12.07.2011, 21:46  [ТС]     Каскады хаара
Всем привет. Кто нибудь подскажите пожалуйста почему вылетает такая ошибка при работе с OpenCv Visual C++ 2010
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ _cvHaarDetectObjects в функции "void __cdecl detect_and_draw(struct _IplImage *)" (?detect_and_draw@@YAXPAU_IplImage@@@Z) C:\Users\Серёга\Documents\Visual Studio 2010\Projects\Реальный тест 2 часть 3\Реальный тест\Реальный тест.obj Реальный тест

Я пытаюсь подключить каскады Хаара

Буду очень признателен, подскажите Please

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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
#include "stdafx.h"
// OpenCV Sample Application: facedetect.c
 
 
// OpenCV Sample Application: facedetect.c
 
// Include header files
#include "cv.h"
#include "highgui.h"
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>
 
// Create memory for calculations
static CvMemStorage* storage = 0;
 
// Create a new Haar classifier
static CvHaarClassifierCascade* cascade = 0;
 
// Function prototype for detecting and drawing an object from an image
void detect_and_draw( IplImage* image );
 
// Create a string that contains the cascade name
const char* cascade_name =
    "haarcascade_frontalface_alt.xml";
/*    "haarcascade_profileface.xml";*/
 
// Main function, defines the entry point for the program.
int main( int argc, char** argv )
{
 
    // Structure for getting video from camera or avi
    CvCapture* capture = 0;
 
    // Images to capture the frame from video or camera or from file
    IplImage *frame, *frame_copy = 0;
 
    // Used for calculations
    int optlen = strlen("--cascade=");
 
    // Input file name for avi or image file.
    const char* input_name;
 
    // Check for the correct usage of the command line
    if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 )
    {
        cascade_name = argv[1] + optlen;
        input_name = argc > 2 ? argv[2] : 0;
    }
    else
    {
        fprintf( stderr,
        "Usage: facedetect --cascade=\"<cascade_path>\" [filename|camera_index]\n" );
        return -1;
        /*input_name = argc > 1 ? argv[1] : 0;*/
    }
 
    // Load the HaarClassifierCascade
    cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
    
    // Check whether the cascade has loaded successfully. Else report and error and quit
    if( !cascade )
    {
        fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
        return -1;
    }
    
    // Allocate the memory storage
    storage = cvCreateMemStorage(0);
    
    // Find whether to detect the object from file or from camera.
    if( !input_name || (isdigit(input_name[0]) && input_name[1] == '\0') )
        capture = cvCaptureFromCAM( !input_name ? 0 : input_name[0] - '0' );
    else
        capture = cvCaptureFromAVI( input_name ); 
 
    // Create a new named window with title: result
    cvNamedWindow( "result", 1 );
 
    // Find if the capture is loaded successfully or not.
 
    // If loaded succesfully, then:
    if( capture )
    {
        // Capture from the camera.
        for(;;)
        {
            // Capture the frame and load it in IplImage
            if( !cvGrabFrame( capture ))
                break;
            frame = cvRetrieveFrame( capture );
 
            // If the frame does not exist, quit the loop
            if( !frame )
                break;
            
            // Allocate framecopy as the same size of the frame
            if( !frame_copy )
                frame_copy = cvCreateImage( cvSize(frame->width,frame->height),
                                            IPL_DEPTH_8U, frame->nChannels );
 
            // Check the origin of image. If top left, copy the image frame to frame_copy. 
            if( frame->origin == IPL_ORIGIN_TL )
                cvCopy( frame, frame_copy, 0 );
            // Else flip and copy the image
            else
                cvFlip( frame, frame_copy, 0 );
            
            // Call the function to detect and draw the face
            detect_and_draw( frame_copy );
 
            // Wait for a while before proceeding to the next frame
            if( cvWaitKey( 10 ) >= 0 )
                break;
        }
 
        // Release the images, and capture memory
        cvReleaseImage( &frame_copy );
        cvReleaseCapture( &capture );
    }
 
    // If the capture is not loaded succesfully, then:
    else
    {
        // Assume the image to be lena.jpg, or the input_name specified
        const char* filename = input_name ? input_name : (char*)"lena.jpg";
 
        // Load the image from that filename
        IplImage* image = cvLoadImage( filename, 1 );
 
        // If Image is loaded succesfully, then:
        if( image )
        {
            // Detect and draw the face
            detect_and_draw( image );
 
            // Wait for user input
            cvWaitKey(0);
 
            // Release the image memory
            cvReleaseImage( &image );
        }
        else
        {
            /* assume it is a text file containing the
               list of the image filenames to be processed - one per line */
            FILE* f = fopen( filename, "rt" );
            if( f )
            {
                char buf[1000+1];
 
                // Get the line from the file
                while( fgets( buf, 1000, f ) )
                {
 
                    // Remove the spaces if any, and clean up the name
                    int len = (int)strlen(buf);
                    while( len > 0 && isspace(buf[len-1]) )
                        len--;
                    buf[len] = '\0';
 
                    // Load the image from the filename present in the buffer
                    image = cvLoadImage( buf, 1 );
 
                    // If the image was loaded succesfully, then:
                    if( image )
                    {
                        // Detect and draw the face from the image
                        detect_and_draw( image );
                        
                        // Wait for the user input, and release the memory
                        cvWaitKey(0);
                        cvReleaseImage( &image );
                    }
                }
                // Close the file
                fclose(f);
            }
        }
 
    }
    
    // Destroy the window previously created with filename: "result"
    cvDestroyWindow("result");
 
    // return 0 to indicate successfull execution of the program
    return 0;
}
 
// Function to detect and draw any faces that is present in an image
void detect_and_draw( IplImage* img )
{
    int scale = 1;
 
    // Create a new image based on the input image
    IplImage* temp = cvCreateImage( cvSize(img->width/scale,img->height/scale), 8, 3 );
 
    // Create two points to represent the face locations
    CvPoint pt1, pt2;
    int i;
 
    // Clear the memory storage which was used before
    cvClearMemStorage( storage );
 
    // Find whether the cascade is loaded, to find the faces. If yes, then:
    if( cascade )
    {
 
        // There can be more than one face in an image. So create a growable sequence of faces.
        // Detect the objects and store them in the sequence
        CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
                                            1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
                                            cvSize(40, 40) );
 
        // Loop the number of faces found.
        for( i = 0; i < (faces ? faces->total : 0); i++ )
        {
           // Create a new rectangle for drawing the face
            CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
 
            // Find the dimensions of the face,and scale it if necessary
            pt1.x = r->x*scale;
            pt2.x = (r->x+r->width)*scale;
            pt1.y = r->y*scale;
            pt2.y = (r->y+r->height)*scale;
 
            // Draw the rectangle in the input image
            cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
        }
    }
 
    // Show the image in the window named "result"
    cvShowImage( "result", img );
 
    // Release the temp image created.
    cvReleaseImage( &temp );
}
 Комментарий модератора 
Сообщение было перенесено из схожей темы
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru