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

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

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

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

23.12.2012, 18:52. Просмотров 2530. Ответов 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 минут
вверх
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2012, 18:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поворот изображения (C++):

поворот на 90... - C++
Хочу повернуть матрицу по часовой стрелке на 90 градусов, но че-то не получается... Помогите найти ошибку... Вот мой код: #include...

Поворот фигуры - C++
Всем привет, нужна ваша помощь: Я сделал функцию для поворота фигуры, но после многократного применения фигура трансформируется,...

Поворот матрицы - C++
Здравствуйте! Мне нужно повернуть матрицу на 90 градусов вправо, то есть дается: ------- abcd edgh ijkl mnop ------- ...

Поворот массива на 45% - C++
Здравствуйте уважаемые форумчане, у меня появилась задачка одна, нужно Заполнить двумерный массив размерности nxn по заданному правилу: ...

Поворот матрицы - C++
Нужно повернуть квадратную матрицу на 180 градусов. У меня не поворачиваются все елементы кроме двух... ...

Поворот матрицы - 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
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2012, 22:49
Привет! Вот еще темы с ответами:

Поворот фигуры - C++
Добрый день. Необходима программа на С++ поворота треугольника вокруг заданной точки. То есть, что бы в начале предлагалось ввести...

поворот массива на 90° - C++
всем привет. помогите разобраться с одной простенькой задачкой. есть массив. сделал зеркальный поворот массива, но теперь нужно...

Поворот матрицы - C++
Содержимое матрицы размерности n x n повернуть на 90 градусов по часовой стрелке вокруг центра симметрии матрицы. Исходная матрица...

поворот многоугольника на плоскости - C++
Пдоскажите пожалуйста как сделать поворот многоугольника на плоскости или подскажите литературу где можно об этом почитать


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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