Я пытаюсь использовать открытый алгоритм CV FAST для обнаружения углов из видеопотока. Вызов метода и настройка кажутся довольно простыми, но я сталкиваюсь с несколькими проблемами. Когда я пытаюсь использовать этот код
while(run)
{
clock_t begin,end;
img = cvQueryFrame(capture);
key = cvWaitKey(10);
cvShowImage("stream",img);
//Cv::FAST variables
int threshold=9;
vector<KeyPoint> keypoints;
if(key=='a'){
//begin = clock();
Mat mat(tempImg);
FAST(mat,keypoints,threshold,true);
//end = clock();
//cout << "\n TIME FOR CALCULATION: " << double(diffClock(begin,end)) << "\n" ;
}
Я получаю эту ошибку:
Ошибка OpenCV: утверждение не выполнено (image.data && image.type () == CV_8U) неизвестно
функция, файл ........ \ ocv \ opencv \ src \ cvaux \ cvfast.cpp, строка 6039
Итак, я решил, что это проблема с глубиной изображения, поэтому я, когда я добавляю это:
IplImage* tempImg = cvCreateImage(Size(img->width,img->height),8,1);
cvCvtColor(img,tempImg,CV_8U);
Я получаю:
Ошибка OpenCV: Неверное количество каналов (Неверное количество каналов для этого сообщения
код ошибки) в неизвестной функции, файл ........ \ ocv \ opencv \ src \ cv \ cvcolor.cpp
линия 2238
Я пытался использовать Mat вместо IplImage для захвата, но я продолжаю получать такие же ошибки.
Есть предложения или помощь?
Заранее спасибо.
Весь файл, чтобы кому-то было проще:
#include "cv.h"
#include "cvaux.hpp"
#include "highgui.h"
#include <time.h>
#include <iostream>
double diffClock(clock_t begin, clock_t end);
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
//Create Mat img for camera capture
IplImage* img;
bool run = true;
CvCapture* capture= 0;
capture = cvCaptureFromCAM(-1);
int key =0;
cvNamedWindow("stream", 1);
while(run)
{
clock_t begin,end;
img = cvQueryFrame(capture);
key = cvWaitKey(10);
cvShowImage("stream",img);
//Cv::FAST variables
int threshold=9;
vector<KeyPoint> keypoints;
if(key=='a'){
//begin = clock();
IplImage* tempImg = cvCreateImage(Size(img->width,img->height),8,1);
cvCvtColor(img,tempImg,CV_8U);
Mat mat(img);
FAST(mat,keypoints,threshold,true);
//end = clock();
//cout << "\n TIME FOR CALCULATION: " << double(diffClock(begin,end)) << "\n" ;
}
else if(key=='x'){
run= false;
}
}
cvDestroyWindow( "stream" );
return 0;
* *} Тысяча двадцать-один