Технический форум по робототехнике.
[C++ Error] cxcore.hpp(1253): E2299 Cannot generate template specialization from 'MatExpr_Op2_<A1,A2,M,Op>'
[C++ Error] cxcore.hpp(1253): E2299 Cannot generate template specialization from 'MatExpr_<E,M>'
[C++ Error] cxcore.hpp(1253): E2040 Declaration terminated incorrectly
[C++ Error] cxcore.hpp(1254): E2299 Cannot generate template specialization from 'MatExpr_Op2_<A1,A2,M,Op>'
[C++ Error] cxcore.hpp(1254): E2299 Cannot generate template specialization from 'MatExpr_<E,M>'
[C++ Error] cxcore.hpp(1254): E2040 Declaration terminated incorrectly
[C++ Error] cxcore.hpp(1256): E2299 Cannot generate template specialization from 'MatExpr_Op4_<A1,A2,A3,A4,M,Op>'
[C++ Error] cxcore.hpp(1256): E2299 Cannot generate template specialization from 'MatExpr_<E,M>'
[C++ Error] cxcore.hpp(1256): E2040 Declaration terminated incorrectly
[C++ Error] cxcore.hpp(1258): E2299 Cannot generate template specialization from 'MatExpr_Op4_<A1,A2,A3,A4,M,Op>'
[C++ Error] cxcore.hpp(1258): E2299 Cannot generate template specialization from 'MatExpr_<E,M>'
[C++ Error] cxcore.hpp(1258): E2040 Declaration terminated incorrectly
[C++ Error] cxcore.hpp(1261): E2299 Cannot generate template specialization from 'MatExpr_Op4_<A1,A2,A3,A4,M,Op>'
[C++ Error] cxcore.hpp(1261): E2299 Cannot generate template specialization from 'MatExpr_<E,M>'
[C++ Error] cxcore.hpp(1261): E2040 Declaration terminated incorrectly
[C++ Error] cxcore.hpp(1299): E2299 Cannot generate template specialization from 'MatExpr_<E,M>'
[C++ Error] cxcore.hpp(1299): E2076 Overloadable operator expected
[C++ Error] cxcore.hpp(1299): E2040 Declaration terminated incorrectly
[C++ Error] cxcore.hpp(2132): E2028 operator-> must return a pointer or a class
[C++ Error] cxoperations.hpp(846): E2015 Ambiguity between '_STL::_fm_cos(const _STL::complex<long double> &)' and '_STL::_fm_cos(const _STL::complex<float> &)'
[C++ Error] cxoperations.hpp(847): E2015 Ambiguity between '_STL::_fm_sin(const _STL::complex<long double> &)' and '_STL::_fm_sin(const _STL::complex<float> &)'
[C++ Error] cxoperations.hpp(1875): E2028 operator-> must return a pointer or a class
[C++ Error] cxmat.hpp(784): E2316 'Mat_<_Tp>::operator MatExpr_<Mat_<_Tp>,Mat_<_Tp> >() const' is not a member of 'Mat_<_Tp>'
[C++ Error] cxmat.hpp(787): E2015 Ambiguity between 'Mat::operator MatExpr_<Mat,Mat>() const' and 'MatExpr_<Mat,Mat>::MatExpr_(const Mat &)'
extern "C" {
#include <open_cv_libs>
}
[C++ Error] _pair.h(36): E2132 Templates and overloaded operators cannot have C linkage
[C++ Error] _pair.h(36): E2040 Declaration terminated incorrectly
[C++ Error] _pair.h(59): E2132 Templates and overloaded operators cannot have C linkage
[C++ Error] _pair.h(59): E2040 Declaration terminated incorrectly
[C++ Error] _algobase.h(290): E2428 Templates must be classes or functions
[C++ Error] _algobase.h(290): E2092 Storage class 'inline' is not allowed here
[C++ Error] _algobase.h(290): E2141 Declaration syntax error
[C++ Error] _uninitialized.h(99): E2428 Templates must be classes or functions
[C++ Error] _uninitialized.h(99): E2092 Storage class 'inline' is not allowed here
[C++ Error] _uninitialized.h(99): E2445 Variable 'pair' is initialized more than once
[C++ Error] _uninitialized.h(99): E2141 Declaration syntax error
[C++ Error] _uninitialized.h(281): E2190 Unexpected }
[C++ Error] _tempbuf.h(46): E2428 Templates must be classes or functions
[C++ Error] _tempbuf.h(46): E2238 Multiple declaration for 'pair'
[C++ Error] _uninitialized.h(99): E2344 Earlier declaration of 'pair'
[C++ Error] _tempbuf.h(46): E2141 Declaration syntax error
[C++ Error] _tempbuf.h(52): E2428 Templates must be classes or functions
[C++ Error] _tempbuf.h(52): E2092 Storage class 'inline' is not allowed here
[C++ Error] _tempbuf.h(52): E2445 Variable 'pair' is initialized more than once
[C++ Error] _tempbuf.h(52): E2141 Declaration syntax error
[C++ Error] _tempbuf.h(146): E2303 Type name expected
[C++ Error] _tempbuf.h(146): E2275 { expected
[C++ Error] _tempbuf.h(146): E2275 { expected
[C++ Error] _tempbuf.c(32): E2428 Templates must be classes or functions
[C++ Error] _tempbuf.c(32): E2238 Multiple declaration for 'pair'
[C++ Error] _tempbuf.c(32): E2228 Too many error or warning messages
#include "highgui.h"
#include <stdio.h>
int main()
{
printf("Console output");
char c;
scanf("%c", &c);
}
cvNamedWindow("window");
cvNamedWindow("window", 0);
void cvMoveWindow( const char* name, int x, int y );
void cvDestroyAllWindows( void );
#include "highgui.h"
#include <stdio.h>
int main()
{
const char *window = "Тестовое окно";
const char *window1 = "Тестовое окно #2";
cvNamedWindow(window, 0);
cvNamedWindow(window1);
cvWaitKey(0);
cvMoveWindow(window1, 100, 100);
cvWaitKey(0);
cvDestroyWindow(window);
cvWaitKey(0);
cvDestroyAllWindows();
}
void cvResizeWindow( const char* name, int width, int height );
void mouse_callback(int event, int x, int y, int flags, void* param)
void cvSetMouseCallback(
const char* window_name,
CvMouseCallback on_mouse,
void* param = NULL
);
// названия событий говорящие, поэтому без комментариев
CV_EVENT_MOUSEMOVE
CV_EVENT_LBUTTONDOWN
CV_EVENT_RBUTTONDOWN
CV_EVENT_MBUTTONDOWN
CV_EVENT_LBUTTONUP
CV_EVENT_RBUTTONUP
CV_EVENT_MBUTTONUP
CV_EVENT_LBUTTONDBLCLK
CV_EVENT_RBUTTONDBLCLK
CV_EVENT_MBUTTONDBLCLK
// снова говорящие сами за себя константы, нажат ли контрл, шифт или альт
CV_EVENT_FLAG_CTRLKEY
CV_EVENT_FLAG_SHIFTKEY
CV_EVENT_FLAG_ALTKEY
/*
* создание двух окон и закрытие одного из них (window) по щелчку левой кнопкой мыши.
*/
#include <highgui.h>
#include <stdio.h>
void mouse_callback(int event, int x, int y, int flags, void* param) // обработчик
{
if (event == CV_EVENT_LBUTTONDOWN) cvDestroyAllWindows();
}
int main()
{
const char *window = "Тестовое окно";
const char *window1 = "Тестовое окно #2";
cvNamedWindow(window, 0);
cvNamedWindow(window1);
IplImage *img1 = cvLoadImage("1.jpg");
IplImage *img2 = cvLoadImage("2.jpg");
cvShowImage(window, img1);
cvShowImage(window1, img2);
cvSetMouseCallback(window, mouse_callback); // привязка обработчика к любому изображению в окне
// cvSetMouseCallback(window, mouse_callback, img1); // привязка обработчика только к изображению img1 в окне window
cvWaitKey(0);
cvDestroyAllWindows();
}
int cvCreateTrackbar(
const char* trackbar_name,
const char* window_name,
int* value,
int count,
CvTrackbarCallback on_change
);
void trackbar_callback(int position)
{
// делаем что-то при изменении слайдера
}
....
int pos = 1;
cvCreateTrackbar("trackbar", "window", &pos, 10, trackbar_callback);
// создание без привязки к обработчику
cvCreateTrackbar("trackbar", "window", &pos, 10, NULL);
// trackbar_name, window_name играют ту же роль, что и в функциях, описанных выше
int cvGetTrackbarPos( // установление позиции слайдера
const char* trackbar_name,
const char* window_name
);
void cvSetTrackbarPos( // получение позиции
const char* trackbar_name,
const char* window_name,
int pos
);
/*
* Работа со слайдером: создание, обработка событий, перемещение в указанную позицию по нажатию клавиши ['0'..'9']
*/
void trackbar_callback(int position)
{
printf("position is: %d\r", position);
}
int main()
{
const char *window = "Тестовое окно";
cvNamedWindow(window);
const char *trackbar = "Слайдер";
int pos = 1;
cvCreateTrackbar(trackbar, window, &pos, 10, trackbar_callback);
char key;
do {
key = cvWaitKey(0);
if (key >= '0' && key <= '9')
cvSetTrackbarPos(trackbar, window, key-'0');
} while (key != 'e');
cvDestroyAllWindows();
}
void trackbar_callback(int position)
{
if (position) {;} else {;}
}
int main()
{
const char *window = "Тестовое окно";
cvNamedWindow(window, 0);
const char *trackbar = "Слайдер";
int pos = 1;
cvCreateTrackbar(trackbar, window, &pos, 1, trackbar_callback);
char key = cvWaitKey(0);
cvDestroyAllWindows();
}
// загрузка изображения из файла
// filename - имя файла
// iscolor - флаг, обозначающий необходимость загрузки изображения в цвете. по умолчанию активен, чтобы сбросить, записываем в качестве значения 0
IplImage* cvLoadImage(
const char* filename,
int iscolor = CV_LOAD_IMAGE_COLOR
);
// сохранение изображения в файл
// filename - имя файла, выбор формата осуществляется на основании расширения.
// image - само изображение
int cvSaveImage(
const char* filename,
const CvArr* image
);
// рисование изображения в окне
// name - окно для вывода
// image - само изображение
void cvShowImage(
const char* name,
const CvArr* image
);
// конвертирование изображения из одного формата в другой (напомню, что формат задается расширением имени при открытии изображения)
// дополнительно осуществляется преобразование цветной/черно-белый, если соответствующие опции были заданы во время открытия изображения.
// src - источник
// dst - контейнер
// flags - флаг. если установлен, то изображение зеркалируется по вертикали.
void cvConvertImage(
const CvArr* src,
CvArr* dst,
int flags = 0
);
/*
* Программа загружает изображение, выводит его в окно, сохраняет
* в другой файл и ждет нажатия клавиши до завершения
*/
#include <highgui.h>
#include <stdio.h>
int main()
{
const char *window = "Тестовое окно";
cvNamedWindow(window);
IplImage *img = cvLoadImage("1.jpg");
cvShowImage(window, img);
cvSaveImage("1buf.jpg", img);
char key = cvWaitKey(0);
cvDestroyAllWindows();
}
CV_CAP_PROP_POS_MSEC // текущая позиция воспроизведения в мсек
CV_CAP_PROP_POS_FRAME // номер текущего кадра
CV_CAP_PROP_POS_AVI_RATIO // значение отношения уже воспроизведенного к общему объему файла, лежит в множестве [0..1]
CV_CAP_PROP_FRAME_WIDTH // ширина кадра
CV_CAP_PROP_FRAME_HEIGHT // высота кадра
CV_CAP_PROP_FPS // FPS, количество кадров в секунду
CV_CAP_PROP_FOURCC // четырех буквенный идентификатор кодека (XVID, DIVX, etc.)
CV_CAP_PROP_FRAME_COUNT // общее количество кадров
// получает значение свойства
// property_id - номер свойства (константы выше)
double cvGetCaptureProperty(
CvCapture* capture,
int property_id
);
// устанавилвает значение свойства
// property_id - номер свойства (константы выше)
int cvSetCaptureProperty(
CvCapture* capture,
int property_id,
double value
)
// вводит в заблуждение тип double применительно к свойству FOURCC, однако ничего необычного здесь почти нет, нужно лишь перекастовать тип
double f = cvGetCaptureProperty(capture,CV_CAP_PROP_FOURCC);
char* fourcc = (char*) (&f);
// index - номер устройства для извлечения видео, отсчет с нуля.
CvCapture* cvCreateCameraCapture( int index );
/*
* устройства отсортированы в соответствии со списком:
CV_CAP_ANY 0
CV_CAP_MIL 100
CV_CAP_VFW 200
CV_CAP_V4L 200
CV_CAP_V4L2 200
CV_CAP_FIREWIRE 300
CV_CAP_IEEE1394 300
CV_CAP_DC1394 300
CV_CAP_CMU1394 300
допустим, первая камера, принадлежащая множеству любых, будет CV_CAP_ANY, следующая - (CV_CAP_ANY+1)
для камер с fireware интерфейсом аналогично: первая - CV_CAP_FIREWIRE, вторая (CV_CAP_FIREWIRE+1).
*/
void cvReleaseCapture( CvCapture** capture );
int cvGrabFrame( CvCapture* capture );
IplImage* cvRetrieveFrame( CvCapture* capture );
IplImage* cvQueryFrame( CvCapture* capture );
/* распространенные идентификаторы
CV_FOURCC('X', 'V', 'I', 'D') = FLV1 codec
CV_FOURCC('P','I','M','1') = MPEG-1 codec
CV_FOURCC('M','J','P','G') = motion-jpeg codec (does not work well)
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
*/
// создает структуру
// filename - файл для записи
// fourcc - четырех буквенный идентификатор кодека, чтобы вручную не кастовать типы, можно воспользоваться макросом CV_FOURCC(c0,c1,c2,c3)
// fps - количество кадров в секунду
// frame_size - структура CvSize, хранящая высоту и ширину в данном случае кадра
// is_color - цветность кадра
CvVideoWriter* cvCreateVideoWriter(
const char* filename,
int fourcc,
double fps,
CvSize frame_size,
int is_color = 1
);
// уничтожает структуру и высвобождает память
void cvReleaseVideoWriter(
CvVideoWriter** writer
);
// записывает кадр в выходной поток
// writer - структура-описатель потока
// image - кадр
int cvWriteFrame(
CvVideoWriter* writer,
const IplImage* image
);
/*
* Программа читает видео из файла, подстраиваясь под фреймрейт
* Для выхода используется клавиша e
*/
#include <highgui.h>
#include <stdio.h>
int main()
{
// создаем окошко для манипуляций
const char *window = "Тестовое окно";
cvNamedWindow(window);
// буфер-кадр
IplImage *img;
// создаем поток для видео
const char *video = "The Outer Limits - 3x13 - Dead Mans Switch (Rus).avi";
CvCapture *capture = cvCreateFileCapture(video);
// читаем фреймрейт
double framerate = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
int delay = (int) (1000 / framerate);
printf("FPS: %0.3f\nDelay: %d\n", framerate, delay);
do {
img = cvQueryFrame(capture);
cvShowImage(window, img);
} while (cvWaitKey(delay) != 'e');
cvDestroyAllWindows();
}
/*
* Программа читает видео из файла, подстраиваясь под фреймрейт
* А также представляет функциональность прокрутки
* Для выхода используется клавиша e
*/
// cxcore.lib cv.lib highgui.lib cvaux.lib cvcam.lib
#include <highgui.h>
#include <stdio.h>
int main()
{
// создаем окошко для манипуляций
const char *window = "Тестовое окно";
cvNamedWindow(window);
// создаем слайдер и подписываем функцию на изменение
// пусть у него будет 1000 делений, делать больше - нерационально
const int resolution = 1000;
const char *trackbar = "Позиция";
cvCreateTrackbar(trackbar, window, 0, resolution-1, NULL);
// буфер-кадр
IplImage *img;
// создаем поток для видео
const char *video = "The Outer Limits - 3x13 - Dead Mans Switch (Rus).avi";
CvCapture *capture = cvCreateFileCapture(video);
// читаем фреймрейт
double framerate = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
int delay = (int) (1000 / framerate);
printf("FPS: %0.3f\nDelay: %d\n", framerate, delay);
int old_trackbar_pos = 0;
do {
img = cvQueryFrame(capture);
cvShowImage(window, img);
int new_trackbar_pos = cvGetTrackbarPos(trackbar, window);
if (new_trackbar_pos != old_trackbar_pos) {
float scale = (float) new_trackbar_pos / resolution;
cvSetCaptureProperty(capture, CV_CAP_PROP_POS_AVI_RATIO, scale);
}
float pos = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_AVI_RATIO);
old_trackbar_pos = (int) (pos*resolution);
cvSetTrackbarPos(trackbar, window, old_trackbar_pos);
printf("position is: %0.2f%%\r", pos*100);
} while (cvWaitKey(delay) != 'e');
cvDestroyAllWindows();
}
/*
* Программа захватывает видео с камеры
* Для выхода используется клавиша e
*/
#include <highgui.h>
#include <stdio.h>
int main()
{
// создаем окошко для манипуляций
const char *window = "Тестовое окно";
cvNamedWindow(window);
// буфер-кадр
IplImage *img;
// создаем поток для видео
CvCapture *camera = cvCreateCameraCapture(CV_CAP_ANY);
int old_trackbar_pos = 0;
do {
img = cvQueryFrame(camera);
cvShowImage(window, img);
} while (cvWaitKey(33) != 'e');
cvDestroyAllWindows();
}
/*
* Программа захватывает видео с камеры и записывает в avi файл, кодек XviD
*/
#include <highgui.h>
#include <stdio.h>
int main()
{
const char *window = "Тестовое окно";
cvNamedWindow(window);
CvCapture *camera = cvCreateCameraCapture(CV_CAP_ANY);
const char *filename = "1.avi";
CvSize size = cvSize(640, 480);
CvVideoWriter *writer = cvCreateVideoWriter(filename, CV_FOURCC('X','V','I','D'), 15, size);
IplImage *frame;
do {
frame = cvQueryFrame(camera);
cvWriteFrame(writer, frame);
cvShowImage(window, frame);
} while (cvWaitKey(1) != 'e');
cvReleaseVideoWriter(&writer);
cvDestroyAllWindows();
}
/*
* Программа отображает видео и созраняет скриншоты по нажатию клавиши 's'
* Выход на клавишу 'e'
*/
#include <highgui.h>
#include <stdio.h>
#include <time.h>
int main()
{
const char *window = "Тестовое окно";
cvNamedWindow(window);
CvCapture *camera = cvCreateCameraCapture(CV_CAP_ANY);
IplImage *frame;
char key;
do {
frame = cvQueryFrame(camera);
cvShowImage(window, frame);
key = cvWaitKey(1);
if (key == 's') {
time_t now = time(NULL);
struct tm *ts = localtime(&now);
char buf[80];
strftime(buf, sizeof(buf), "%Y-%m-%d-%H-%M-%S.jpg", ts);
printf("Screenshot %s saved\n", buf);
cvSaveImage(buf, frame);
}
} while (key != 'e');
cvDestroyAllWindows();
}