Дата релиза & версия:
Модель:
Совместимость:
Производитель:
Разрядность:
Размер:
Внимание! Перед установкой драйвера рекомендуется удалить его старую версию. Удаление драйвера особенно важно при замене оборудования или перед установкой новых версий драйверов видеокарты.

Hello, I am trying to detect faces on a series of images in a node script and I am getting a segmentation fault.

This is the output of the console when the error occurs:

  OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /tmp/opencv-20160626-26273-1a7s2xo/opencv-2.4.13/modules/core/src/array.cpp, line 2482
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /tmp/opencv-20160626-26273-1a7s2xo/opencv-2.4.13/modules/core/src/array.cpp, line 2482
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /tmp/opencv-20160626-26273-1a7s2xo/opencv-2.4.13/modules/core/src/array.cpp, line 2482
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /tmp/opencv-20160626-26273-1a7s2xo/opencv-2.4.13/modules/core/src/array.cpp, line 2482
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /tmp/opencv-20160626-26273-1a7s2xo/opencv-2.4.13/modules/core/src/array.cpp, line 2482
Segmentation fault: 11

This is the code that produces the error:

glob.sync('*.jpg' ).forEach( function( file,index,array ) {

cv.readImage(file, function(err, im){
    im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){
        if(faces.length>0){

            //do something

        }
        else{

            //do another thing
        }

      });
    })

});

Closed for the following reason
question is off-topic or not relevant by
berak
close date 2016-08-08 20:58:14.952202

This repository was archived by the owner on Jan 25, 2022. It is now read-only.

This repository was archived by the owner on Jan 25, 2022. It is now read-only.

Description

Hello,

I am getting the below error, when i am running my code.
Please help me on this.

error:

OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/core/src/array.cpp, line 2482
Traceback (most recent call last):
File “/home/rajat/.config/gedit/tools/new-tool”, line 12, in
exec(sys.stdin.read())
File “”, line 85, in
File “”, line 60, in predict
cv2.error: /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat

code:

video_cap = cv2.VideoCapture(0)

while True:
	ret, frame = video_cap.read()
	frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5)
	gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
	
	faces = face_cascade.detectMultiScale(gray, 1.05, 6)
	for face in faces:
		x, y, w, h = face
		face_region = gray[y:y+h, x:x+w]
		
		predicted_person_number, confidence = face_recognition.predict(face_region)
		
		cv2.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 2)
		if predicted_person_number == 16:
			cv2.putText(frame, 'RB', (x,y), cv2.FONT_HERSHEY_TRIPLEX, 1, (255,255,255))
		else:
			cv2.putText(frame, str(predicted_person_number), (x,y), cv2.FONT_HERSHEY_TRIPLEX, 1, (255,255,255))
			
	cv2.imshow('Running face recognition...', frame)
	
	if cv2.waitKey(1) & 0xFF == ord('q'): break
	
video_cap.release()
cv2.destroyAllWindows()

Code: Select all

#include <sstream>
#include <string>
#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv/cv.h"

using namespace cv;
//for blue color
int H_MINB = 98;
int H_MAXB = 100;
int S_MINB = 0;
int S_MAXB = 256;
int V_MINB = 0;
int V_MAXB = 256;

//for orange color
int H_MIN = 0;
int H_MAX = 256;
int S_MIN = 0;
int S_MAX = 200;
int V_MIN = 0;
int V_MAX = 256;
//default capture width and height
const int FRAME_WIDTH = 320;
const int FRAME_HEIGHT = 240;
//max number of objects to be detected in frame
const int MAX_NUM_OBJECTS=50;
//minimum and maximum object area
const int MIN_OBJECT_AREA = 25*25;                        
const int MAX_OBJECT_AREA = FRAME_HEIGHT*FRAME_WIDTH/2; ///640*480/2=153600
//names that will appear at the top of each window
const string windowName = "Original Image";
const string windowName1 = "HSV Image";
const string windowName2 = "Thresholded Image";
const string windowName3 = "After Morphological Operations";
const string windowName4 = "Thresholded Image blue";
const string trackbarWindowName = "Trackbars";
void on_trackbar( int, void* )
{//This function gets called whenever a
	// trackbar position is changed
}
string intToString(int number){

	std::stringstream ss;
	ss << number;
	return ss.str();
}
void createTrackbars(){
	//create window for trackbars

    namedWindow(trackbarWindowName,0);
	//create memory to store trackbar name on window
	char TrackbarName[50];
	sprintf( TrackbarName, "H_MIN", H_MIN);
	sprintf( TrackbarName, "H_MAX", H_MAX);
	sprintf( TrackbarName, "S_MIN", S_MIN);
	sprintf( TrackbarName, "S_MAX", S_MAX);
	sprintf( TrackbarName, "V_MIN", V_MIN);
	sprintf( TrackbarName, "V_MAX", V_MAX);
	//create trackbars and insert them into window
	//                                  ---->    ---->     ---->      
    createTrackbar( "H_MIN", trackbarWindowName, &H_MIN, H_MAX, on_trackbar );
    createTrackbar( "H_MAX", trackbarWindowName, &H_MAX, H_MAX, on_trackbar );
    createTrackbar( "S_MIN", trackbarWindowName, &S_MIN, S_MAX, on_trackbar );
    createTrackbar( "S_MAX", trackbarWindowName, &S_MAX, S_MAX, on_trackbar );
    createTrackbar( "V_MIN", trackbarWindowName, &V_MIN, V_MAX, on_trackbar );
    createTrackbar( "V_MAX", trackbarWindowName, &V_MAX, V_MAX, on_trackbar );

}
/////////////////////////////////////////////////////new//////////////////////////////////////////////////////////////////////
void drawObjectblue(int xblue, int yblue,Mat &frameblue){

	circle(frameblue,Point(xblue,yblue),20,Scalar(0,255,0),2);
    if(yblue-25>0)
    line(frameblue,Point(xblue,yblue),Point(xblue,yblue-25),Scalar(0,255,0),2);
    else line(frameblue,Point(xblue,yblue),Point(xblue,0),Scalar(0,255,0),2);
    if(yblue+25<FRAME_HEIGHT)
    line(frameblue,Point(xblue,yblue),Point(xblue,yblue+25),Scalar(0,255,0),2);
    else line(frameblue,Point(xblue,yblue),Point(xblue,FRAME_HEIGHT),Scalar(0,255,0),2);
    if(xblue-25>0)
    line(frameblue,Point(xblue,yblue),Point(xblue-25,yblue),Scalar(0,255,0),2);
    else line(frameblue,Point(xblue,yblue),Point(0,yblue),Scalar(0,255,0),2);
    if(xblue+25<FRAME_WIDTH)
    line(frameblue,Point(xblue,yblue),Point(xblue+25,yblue),Scalar(0,255,0),2);
    else line(frameblue,Point(xblue,yblue),Point(FRAME_WIDTH,yblue),Scalar(0,255,0),2);

	putText(frameblue,intToString(xblue)+","+intToString(yblue),Point(xblue,yblue+30),1,1,Scalar(0,255,0),2);

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
void drawObject(int x, int y,Mat &frame){

	circle(frame,Point(x,y),20,Scalar(0,255,0),2);
    if(y-25>0)
    line(frame,Point(x,y),Point(x,y-25),Scalar(0,255,0),2);
    else line(frame,Point(x,y),Point(x,0),Scalar(0,255,0),2);
    if(y+25<FRAME_HEIGHT)
    line(frame,Point(x,y),Point(x,y+25),Scalar(0,255,0),2);
    else line(frame,Point(x,y),Point(x,FRAME_HEIGHT),Scalar(0,255,0),2);
    if(x-25>0)
    line(frame,Point(x,y),Point(x-25,y),Scalar(0,255,0),2);
    else line(frame,Point(x,y),Point(0,y),Scalar(0,255,0),2);
    if(x+25<FRAME_WIDTH)
    line(frame,Point(x,y),Point(x+25,y),Scalar(0,255,0),2);
    else line(frame,Point(x,y),Point(FRAME_WIDTH,y),Scalar(0,255,0),2);

	putText(frame,intToString(x)+","+intToString(y),Point(x,y+30),1,1,Scalar(0,255,0),2);

}
//////////////////////baru//////////////////
void morphOpsblue(Mat &threshblue){

	Mat erodeElement = getStructuringElement( MORPH_RECT,Size(3,3));
	Mat dilateElement = getStructuringElement( MORPH_RECT,Size(8,8));

	erode(threshblue,threshblue,erodeElement);
	erode(threshblue,threshblue,erodeElement);


	dilate(threshblue,threshblue,dilateElement);
	dilate(threshblue,threshblue,dilateElement);
	
}
///////////////////////baru////////////////////
void morphOps(Mat &thresh){

	Mat erodeElement = getStructuringElement( MORPH_RECT,Size(3,3));
    //dilate with larger element so make sure object is nicely visible
	Mat dilateElement = getStructuringElement( MORPH_RECT,Size(8,8));

	erode(thresh,thresh,erodeElement);
	erode(thresh,thresh,erodeElement);

	dilate(thresh,thresh,dilateElement);
	dilate(thresh,thresh,dilateElement);
}
/////baru/////////////////////////////////////////////////////////////////////////////
void trackFilteredObjectblue(int &xblue, int &yblue, Mat thresholdblue, Mat &cameraFeed)
{

	Mat tempblue;
	thresholdblue.copyTo(tempblue);
	vector< vector<Point> > contours;
	vector<Vec4i> hierarchy;
	findContours(tempblue,contours,hierarchy,CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE );
	double refArea = 0;
	bool objectFound = false;
	if (hierarchy.size() > 0) {
		int numObjects = hierarchy.size();
        if(numObjects<MAX_NUM_OBJECTS){
			for (int index = 0; index >= 0; index = hierarchy[index][0]) {

				Moments moment = moments((cv::Mat)contours[index]);
				double area = moment.m00;
                if(area>MIN_OBJECT_AREA && area<MAX_OBJECT_AREA && area>refArea){
					xblue = moment.m10/area;
					yblue = moment.m01/area;
					objectFound = true;
					refArea = area;
				}else objectFound = false;                                      

			}
			//let user know you found an object
			if(objectFound ==true){
				putText(cameraFeed,"Blue point track",Point(0,50),2,1,Scalar(0,255,0),2);
				//draw object location on screen
				drawObjectblue(xblue,yblue,cameraFeed);}

		}else putText(cameraFeed,"TOO MUCH NOISE! ADJUST FILTER",Point(0,50),1,2,Scalar(0,0,255),2);
	}
}
//////baru///////////////////////////////////////

void trackFilteredObject(int &x, int &y, Mat threshold, Mat &cameraFeed){

	Mat temp;
	threshold.copyTo(temp);
	//these two vectors needed for output of findContours
	vector< vector<Point> > contours;
	vector<Vec4i> hierarchy;
	//find contours of filtered image using openCV findContours function
	findContours(temp,contours,hierarchy,CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE );
	//use moments method to find our filtered object
	double refArea = 0;
	bool objectFound = false;
	if (hierarchy.size() > 0) {
		int numObjects = hierarchy.size();
        //if number of objects greater than MAX_NUM_OBJECTS we have a noisy filter
        if(numObjects<MAX_NUM_OBJECTS){
			for (int index = 0; index >= 0; index = hierarchy[index][0]) {

				Moments moment = moments((cv::Mat)contours[index]);
				double area = moment.m00;

                if(area>MIN_OBJECT_AREA && area<MAX_OBJECT_AREA && area>refArea){
					x = moment.m10/area;
					y = moment.m01/area;
					objectFound = true;
					refArea = area;
				}else objectFound = false;                          

			}
			//let user know you found an object
			if(objectFound ==true){
				putText(cameraFeed,"Tracking Object",Point(0,50),2,1,Scalar(0,255,0),2);
				//draw object location on screen
				drawObject(x,y,cameraFeed);}

		}else putText(cameraFeed,"TOO MUCH NOISE! ADJUST FILTER",Point(0,50),1,2,Scalar(0,0,255),2);
	}
}
int main(int argc, char* argv[])
{   char key=0;

    bool trackObjects = true;                      
    bool useMorphOps = true;
                            bool useMorphOpsblue = true;
	Mat cameraFeed;
	Mat HSV;
                         Mat thresholdblue;
	Mat threshold;
	                     int xblue=0, yblue=0;
	int x=0, y=0;

	VideoCapture capture;
	//open capture object at location zero (default location for webcam)
	capture.open(0);
	//set height and width of capture frame
	capture.set(CV_CAP_PROP_FRAME_WIDTH,FRAME_WIDTH);
	capture.set(CV_CAP_PROP_FRAME_HEIGHT,FRAME_HEIGHT);

while(key != 'Q' && key != 'q')
{		capture.read(cameraFeed);
		cvtColor(cameraFeed,HSV,COLOR_BGR2HSV);
		                   inRange(HSV,Scalar(H_MINB,S_MINB,V_MINB),Scalar(H_MAXB,S_MAXB,V_MAXB),thresholdblue);
		inRange(HSV,Scalar(H_MIN,S_MIN,V_MIN),Scalar(H_MAX,S_MAX,V_MAX),threshold);
 		                if(useMorphOpsblue)
		                morphOps(thresholdblue);
		if(useMorphOps)
		morphOps(threshold);
		if(trackObjects)
			            (xblue,yblue,thresholdblue,cameraFeed);
            (x,y,threshold,cameraFeed);
		imshow(windowName2,threshold);
                         imshow(windowName4,thresholdblue);
		imshow(windowName,cameraFeed); //originl pic
		 key = cvWaitKey(30);
}
	return 0;
}

I can compile it, but it’ error after running it… what is the problem?
error:
Opencv Error: bad flag (parameter or structure field) (unrecognized or unsupperted array type) in cvGetMat, file build /opencv-XZa2gn/opencv-2.3.1/modules/core/src/array.cpp. line 2482
terminate called after throwing an instance of ‘cv::Exception’
what(): /build/opencv-XZa2gn/opencv-2.3.1/modules.core/src/array.cpp:2482 error: (-206) unrecognized or unsupported array type in function cvGetMat

Утечка памяти и вылет с ошибкой после запуска

20.09.2017, 20:30. Показов 1251. Ответов 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//////////////////////////////////Заголовочные функции//////////////////////////////////
#include <opencv2/opencv.hpp>   //модуль обработки изображений и компьютерного зрения
#include <opencv2/highgui.hpp> //ввод/вывод изображений и видео, захват видео и т.п.
#include <stdlib.h> //функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие.
#include <stdio.h>      //определения макросов, константы и объявления функций и типов
#include <opencv/cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <algorithm>
#include <iostream>
#include <math.h>
 
/////////////////////////////Используемые пространства имен/////////////////////////////
using namespace std;
using namespace cv;
 
/////////////////////////////Переменные (глобальные)/////////////////////////////
IplImage* frame=0;  //для вывода изображения с камеры, цветное изображение
IplImage* gray = 0;  //перевод видео в ч/б
Mat grayMat; // для поиска каскадом Хаара
 
int main(int argc, char* argv[])
{
    CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY); //получаем любую подключённую камеру
    assert( capture );  //прекращение программы с выводом ошибки согласно условию в скобках, если условие ложно
 
    // задаем требуемое разрешение
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 640);//1280);
    //cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 480);//960);
    printf("[i] press Esc for quit!\n");
 
    // узнаем ширину и высоту кадра. Выводим в консоль
    double width = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);  //ширина
    double height = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);  //высота
    printf("[i] %.0f x %.0f\n", width, height );  //выводим значения ширины и высоты
 
    cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);  //создаем окно для отображения картинки
 
    CascadeClassifier cascadeSymbol; // Объявление каскада
    bool cascadeSymbolLoad = cascadeSymbol.load("/home/pi/Desktop/SAP_1.0/Haar/cascade_A.xml"); // Загрузка каскада
    assert( cascadeSymbolLoad );
 
    while(true){  //бесконечный цикл для отображения кадров видео
 
        frame = cvQueryFrame( capture );  // получаем кадр
 
        gray = cvCreateImage(cvGetSize(frame), 8, 1);
 
        cvCvtColor(frame, gray, CV_RGB2GRAY);
/////////////////////////////////////////////////////////////////////////////////////////
 
  grayMat = cvarrToMat(gray);
 
    vector<Rect>symbols;
    cascadeSymbol.detectMultiScale(grayMat, symbols); // Поиск с помощью каскада
 
    for (int i = 0; i < symbols.size(); ++i)
    {
        Rect& p = symbols[i];
        Point symbolBegin   = Point(p.x, p.y);
        Point symbolEnd     = Point(p.x+p.width, p.y+p.height);
        cout << "X: " << p.x << " Y: " << p.y << " Width: " << p.width << " Height: " << p.height << endl;
        rectangle(grayMat, symbolBegin, symbolEnd, Scalar(0,255,0), 2);
        ///////////////////////////////////////////////////////////////
        // Текстовый буффер
        char text_buf[32];
        //Текст в массив
        sprintf(text_buf, "A");
        //Шрифт
        CvFont font;
        cvInitFont( &font, CV_FONT_HERSHEY_COMPLEX,1.0, 1.0, 0, 1, CV_AA);
        //Вывод текста
        IplImage itog;
        gray = &(itog = grayMat);
        cvPutText(gray, text_buf, cvPoint(p.x + 50, p.y + 50), &font, cvScalar(0,0,255));
        ///////////////////////////////////////////////////////////////
    }
/////////////////////////////////////////////////////////////////////////////////////////
 
        cvShowImage("capture", gray); // показываем в ранее созданном окне
 
        char c = cvWaitKey(33); // ждем нажатия клавиши
        if (c == 27) break; //выход из цикла если нажат ESC
        }
 
    cvReleaseCapture( &capture ); //освобождаем память
    cvDestroyAllWindows();  //удаляем созданные окна для отображения
    return 0; //по завершению программы возвращаем ноль
}

Код в принципе компилируется и работает, но жрет память. Я думаю, это связано с тем, что из памяти нигде не освобождается место от Mat grayMat; gray и frame.

На основе этого кода я написал еще один:

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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//////////////////////////////////Заголовочные функции//////////////////////////////////
#include <opencv2/opencv.hpp>   //модуль обработки изображений и компьютерного зрения
#include <opencv2/highgui.hpp> //ввод/вывод изображений и видео, захват видео и т.п.
#include <stdlib.h> //функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие.
#include <stdio.h>      //определения макросов, константы и объявления функций и типов
#include <opencv/cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <algorithm>
#include <iostream>
#include <math.h>
 
/////////////////////////////Используемые пространства имен/////////////////////////////
using namespace std;
using namespace cv;
 
/////////////////////////////Переменные (глобальные)/////////////////////////////
IplImage* frame=0;  //для вывода изображения с камеры, цветное изображение
IplImage* gray = 0;  //перевод видео в ч/б
Mat grayMat; // для поиска каскадом Хаара A
Mat grayMatB; // для поиска каскадом Хаара Б
 
int main(int argc, char* argv[])
{
    CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY); //получаем любую подключённую камеру
    assert( capture );  //прекращение программы с выводом ошибки согласно условию в скобках, если условие ложно
 
    // задаем требуемое разрешение
    cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 640);//1280);
    //cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 480);//960);
    printf("[i] press Esc for quit!\n");
 
    // узнаем ширину и высоту кадра. Выводим в консоль
    double width = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);  //ширина
    double height = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);  //высота
    printf("[i] %.0f x %.0f\n", width, height );  //выводим значения ширины и высоты
 
    cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);  //создаем окно для отображения картинки
 
    CascadeClassifier cascadeSymbol; // Объявление каскада A
    bool cascadeSymbolLoad = cascadeSymbol.load("/home/pi/Desktop/SAP_1.0/Haar/cascade_A.xml"); // Загрузка каскада
    assert( cascadeSymbolLoad );
 
    CascadeClassifier cascadeSymbolB; // Объявление каскада Б
    bool cascadeSymbolLoadB = cascadeSymbolB.load("/home/pi/Desktop/SAP_1.0/Haar/cascade_B.xml"); // Загрузка каскада
    assert( cascadeSymbolLoadB );
 
    while(true){  //бесконечный цикл для отображения кадров видео
 
        frame = cvQueryFrame( capture );  // получаем кадр
 
        gray = cvCreateImage(cvGetSize(frame), 8, 1);
 
        cvCvtColor(frame, gray, CV_RGB2GRAY);  //переводим в ч/б
/////////////////////////////////////////////////////////////////////////////////////////
 
  grayMat = cvarrToMat(gray);
 
    vector<Rect> symbols;
    cascadeSymbol.detectMultiScale(grayMat, symbols); // Поиск с помощью каскада
 
    for (int i = 0; i < symbols.size(); ++i)
    {
        Rect& p = symbols[i];
        Point symbolBegin   = Point(p.x, p.y);
        Point symbolEnd     = Point(p.x+p.width, p.y+p.height);
        cout << "X: " << p.x << " Y: " << p.y << " Width: " << p.width << " Height: " << p.height << endl;
        rectangle(grayMat, symbolBegin, symbolEnd, Scalar(0,255,0), 2);
        ///////////////////////////////////////////////////////////////
        // Текстовый буффер
        char text_buf[32];
        //Текст в массив
        sprintf(text_buf, "A");
        //Шрифт
        CvFont font;
        cvInitFont( &font, CV_FONT_HERSHEY_COMPLEX,1.0, 1.0, 0, 1, CV_AA);
        //Вывод текста
        IplImage itog;
        gray = &(itog = grayMat);
        cvPutText(gray, text_buf, cvPoint(p.x + 50, p.y + 50), &font, cvScalar(0,0,255));
        ///////////////////////////////////////////////////////////////
    }
/////////////////////////////////////////////////////////////////////////////////////////
    grayMatB = cvarrToMat(gray);
    vector<Rect> symbolsB;
        cascadeSymbolB.detectMultiScale(grayMatB, symbolsB); // Поиск с помощью каскада
 
        for (int y = 0; y < symbolsB.size(); ++y)
        {
            Rect& z = symbolsB[y];
            Point symbolBeginB  = Point(z.x, z.y);
            Point symbolEndB        = Point(z.x+z.width, z.y+z.height);
            cout << "X: " << z.x << " Y: " << z.y << " Width: " << z.width << " Height: " << z.height << endl;
            rectangle(grayMatB, symbolBeginB, symbolEndB, Scalar(0,255,0), 2);
            ///////////////////////////////////////////////////////////////
            // Текстовый буффер
            char text_buf[32];
            //Текст в массив
            sprintf(text_buf, "B");
            //Шрифт
            CvFont font;
            cvInitFont( &font, CV_FONT_HERSHEY_COMPLEX,1.0, 1.0, 0, 1, CV_AA);
            //Вывод текста
            IplImage itogB;
            gray = &(itogB = grayMatB);
            cvPutText(gray, text_buf, cvPoint(z.x + 50, z.y + 50), &font, cvScalar(0,0,255));
            ///////////////////////////////////////////////////////////////
        }
/////////////////////////////////////////////////////////////////////////////////////////
        cvShowImage("capture", gray); // показываем в ранее созданном окне
 
        char c = cvWaitKey(33); // ждем нажатия клавиши
        if (c == 27) break; //выход из цикла если нажат ESC
        }
 
    cvReleaseCapture( &capture ); //освобождаем память
    cvDestroyAllWindows();  //удаляем созданные окна для отображения
    return 0; //по завершению программы возвращаем ноль
}

Код так же запускается, но тоже жрет память(
К тому же еще и вылетает с ошибкой в консоли через некоторое время после запуска (иногда может пару раз найти символ)

C++
1
2
3
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /home/pi/opencv/modules/core/src/array.cpp, line 2502
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/pi/opencv/modules/core/src/array.cpp:2502: error: (-206) Unrecognized or unsupported array type in function cvGetMat

Никак не могу понять, что не так. Первый код от такой ошибки не страдает.

Добавлено через 3 часа 46 минут
С вылетом справился добавив промежуточную копию изображения в 57 строку.
Помогите разобраться с утечкой памяти!



0



Любой драйвер для вашего ПК
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии