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

Распознавание по цвету (c opencv). Динамические массивы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Jack_
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 5
17.02.2013, 12:00     Распознавание по цвету (c opencv). Динамические массивы #1
Здравствуйте, форумчане
Задача стоит следующая - распознавать оранжевый прямоугольник и заносить его координаты в массивы.
Компилятор не выдаёт ошибок, но исполняемая программа упорно вылетает в моменте помещения данных в массивы.
"Необработанное исключение в "0x775ae6c3" в "test1.exe": 0xC0000374: Куча была повреждена."
Так же, мне было бы приятно выслушать критику по поводу общего исполнения программы, ибо всё очень криво, как я понимаю (забросил си на 4 года, а теперь вот понадобилось).

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
#include "stdafx.h"
 
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
 
using namespace std;
 
void main()
{
    IplImage* src=cvLoadImage("D:\\3.jpg",1);
    
    int i=0;
    int *Xf, *Yf;
 
    int nChan = src->nChannels;  // Определить количество каналов, 
                                    //чтобы реализация не зависела от пользователя
 
    if(src==NULL){ // Если вдруг такой картинки нет
        printf("File does not exist");
        cvWaitKey();
        exit(0);
    }
 
    cvNamedWindow("In", CV_WINDOW_AUTOSIZE ); 
    cvShowImage("In",src);
 
    cvCvtColor(src,src,CV_BGR2HSV); //преобразуем картинку из стандартного BGR
                                //в HSV чтобы легче ловить оранжевый
    
    Xf = new int [src->width];
    Yf = new int [src->height]; //Выделяем динамически, потому что иначе никак
 
    // пробегаемся по всем пикселям изображения
        for( int y=0; y<src->height; y++ )
        {
 
                uchar* ptr = (uchar*) (src->imageData) + y * src->widthStep;  
                //uchar* ptrfind = (uchar*) (dst->imageData) + y * dst->widthStep;
                // указатель на y-ю строчку пикселей изображения 
 
                for( int x=0; x<src->width; x++ ) 
                {
                         // пробегаемся по всем каналам каждого пикселя
 
                if( (ptr[nChan*x+2]>80)                           //V?  R
                    &&(ptr[nChan*x+1]>60)                        //S?   G
                    && (ptr[nChan*x]>10) && (ptr[nChan*x]<38) ) //H?    B
                    {
                        Xf[i] = x;  //копируем координаты в другие массивы
                        Yf[i] = y;
                        i++;
                    }
                
                }
        }
 
for (int a=0; a<src->width; a++)  cout<<Xf[a]<<"_";
cout<<Xf[5]<<endl;
for (int a=0; a<src->height; a++) cout<<Yf[a]<<"_";
 
    cvWaitKey();
    cvDestroyWindow( "In" );
    
    delete [] Xf;
    delete [] Yf;
 
}
Добавлено через 2 часа 50 минут
Упс, нашел ошибку сам. Динамические массивы должны быть размерности
C++
1
src->width * src->height
, а то вдруг прямоугольник на весь экран
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 12:00     Распознавание по цвету (c opencv). Динамические массивы
Посмотрите здесь:

Динамические массивы. C++
одномерные массивы, динамические массивы C++
C++ Динамические массивы
Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц) C++
Динамические массивы и функции. Динамические массивы. C++
Распознавание лиц с OpenCv C++
C++ Динамические массивы
Динамические массивы C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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