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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
Rt777
1 / 1 / 0
Регистрация: 03.11.2010
Сообщений: 29
#1

Поворот изображения - C++

23.12.2012, 18:52. Просмотров 2345. Ответов 1
Метки нет (Все метки)

Доброго времени суток. Возникла проблема при написании программы для обнаружения лица. Обнаружение проходит отлично, но если изображение перевернутое то уже не все так хорошо. Подскажите как можно улучшить программу чтобы она поворачивала изображение скажем на определенный угол раза 2-3 и производила детектирование
Вот листинг
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
#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>
 
 
 
const char* cascade_name =
    "C:/Program Files/OpenCV/data/haarcascades/haarcascade_frontalface_alt.xml";
 
void detect_and_draw( IplImage* image );
 
int main( int argc, char** argv )
{
 
   
    IplImage *img = cvLoadImage("lena.jpg");
    detect_and_draw(img);
 
    cvWaitKey();
 
    cvReleaseImage(&img);
 
    cvDestroyWindow("result");
 
    return 0;
}
 
void detect_and_draw( IplImage* img )
{
 
    static CvMemStorage* storage = 0;
    static CvHaarClassifierCascade* cascade = 0;
    int scale = 1;
 
    IplImage* temp = cvCreateImage( cvSize(img->width/scale,img->height/scale), 8, 3 );
 
    CvPoint pt1, pt2;
    int i;
 
    cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
 
    if( !cascade )
    {
        fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
        return;
    }
 
    storage = cvCreateMemStorage(0);
 
    cvNamedWindow( "result", 1 );
 
    cvClearMemStorage( storage );
 
    if( cascade )
    {
 
        CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
                                            1.1, 5, CV_HAAR_DO_CANNY_PRUNING,
                                            cvSize(40, 40) );
 
        for( i = 0; i < (faces ? faces->total : 0); i++ )
        {
 
            CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
 
            pt1.x = r->x*scale;
            pt2.x = (r->x+r->width)*scale;
            pt1.y = r->y*scale;
            pt2.y = (r->y+r->height)*scale;
 
            cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
        }
    }
 
    cvShowImage( "result", img );
    cvReleaseImage( &temp );
}
Добавлено через 2 часа 21 минуту
Ну или хотя бы функцию за поворот отвечающую посоветуйте

Добавлено через 2 часа 45 минут
Спасите помогите

Добавлено через 2 часа 37 минут
вверх
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2012, 18:52     Поворот изображения
Посмотрите здесь:

C++ Поворот двумерного массива
Поворот матрицы C++
C++ поворот на 90...
C++ поворот многоугольника на плоскости
Поворот матрицы C++
C++ Поворот фигуры
Поворот фигуры C++
поворот массива на 90° C++
C++ Поворот матрицы
C++ Поворот массива на 45%
C++ Поворот матрицы
Поворот, перемещение пятиугольника C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nagdiel
114 / 114 / 3
Регистрация: 23.12.2012
Сообщений: 195
23.12.2012, 22:49     Поворот изображения #2
Расчет матрицы поворота
C
1
CvMat* cv2DRotationMatrix(CvPoint2D32f center, double angle, double scale, CvMat* map_matrix)
Собственно поворот
C
1
void cvGetQuadrangleSubPix(const CvArr* src, CvArr* dst, const CvMat* map_matrix)
где в качестве map_matrix передаем матрицу поворота, полученную первой функцией

P.S. Версия OpenCV - 2.4.3
Yandex
Объявления
23.12.2012, 22:49     Поворот изображения
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru