我正在尝试使用开放式CV FAST算法来检测来自视频源的角点。方法调用和设置似乎非常简单,但我遇到了一些问题。当我尝试使用此代码OpenCV有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 \简历\(这个通道数不正确CONV 版为代码) cvcolor.cpp ,line 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;
}
我已通过API看,花了相当多的时间四处寻找在线。猜猜我只是没有找到正确的地方。感谢指针。 – dipsmac 2012-03-14 23:41:30
快速代码示例非常过时。此外,虽然它没有解决您的错误,但您应该使用Mat类型,不推荐使用IplImage。 – 2012-06-09 17:26:53