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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
Rt777
1 / 1 / 0
Регистрация: 03.11.2010
Сообщений: 29
23.12.2012, 18:52     Поворот изображения #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++ поворот на 90...
Поворот матрицы C++
C++ Поворот фигуры
Поворот фигуры C++
поворот массива на 90° C++
C++ Поворот матрицы
C++ Поворот матрицы

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nagdiel
 Аватар для 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     Поворот изображения
Ответ Создать тему
Опции темы

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