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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Jack_
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 5
#1

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

17.02.2013, 12:00. Просмотров 1577. Ответов 0
Метки нет (Все метки)

Здравствуйте, форумчане
Задача стоит следующая - распознавать оранжевый прямоугольник и заносить его координаты в массивы.
Компилятор не выдаёт ошибок, но исполняемая программа упорно вылетает в моменте помещения данных в массивы.
"Необработанное исключение в "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
, а то вдруг прямоугольник на весь экран
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 12:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Распознавание по цвету (c opencv). Динамические массивы (C++):

OpenCV: обнаружение объектов по цвету - C++
помогите пожалуйста кто-нибудь советом. скачал установил open cv 3.0 стал пробовать уроки вроде всё ничо так но вот дохромав до разделов ...

Распознавание лиц с OpenCv - C++
Всем доброго времени суток. Помогите пожалуйста решить проблему поиска лица в видеопотоке. Теории начатался, знаю что нужно OpenCv и...

Распознавание текста OpenCV - C++
Доброго времени суток! посмотрел на днях видео https://www.youtube.com/watch?v=pgth0qxTgYY и меня заитересовал этот проект. моя идея...

OpenCV CLR статичные и динамические библиотеки в Visual Studio - C++
Доброго времени суток, проблема такая: собрал OpenCV со статичными библиотеками, чтобы иметь возможность запускать на других компьютерах....

Динамические массивы и функции. Динамические массивы. - C++
Дана матрица 6х8 целого типа. Создать одномерный массив, содержащий элементы матрицы, кратные числу, введенному с клавиатуры.

Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц) - C++
Для каждого элемента , bij, i= 1,...,n , j=1,...,n определяется свой многоугольник местонахождением соответствующего элемента aij (см....

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2013, 12:00
Привет! Вот еще темы с ответами:

Динамические массивы - C++
Вот еще с этой задачей помогите пожааалуйста, очень надо 1. Заданы два массива А(N) и В(M). В каждом из массивов найти наименьшее...

динамические массивы - C++
Никогда сильно не работал с динамическими массивами.Но это время пришло) К примеру дана матрица из 8x8 элементов.Как к ней добавить...

динамические массивы - C++
Задали квадратную матрицу, все элементы которой равны единице. Написать функцию void func (int ** arr, int n), которая заполняет...

Динамические массивы - C++
Добрый вечер! Проблема такая,плохо понимаю,как изменить в моей программе обычные массивы на динамические. Надеюсь,кто-то поможет и...


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

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

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