【问题标题】:OpenCV: Error when using function cvGoodFeaturesToTrackOpenCV:使用函数 cvGoodFeaturesToTrack 时出错
【发布时间】:2011-10-06 21:42:46
【问题描述】:

当我调用函数 cvGoodFeaturesToTrack 来查找哈里斯角时,我得到了这个错误:

OpenCV Error: Assertion failed (src.type() == CV_8UC1 || src.type() == CV_32FC1) in cornerEigenValsVecs, file /build/buildd/opencv-2.1.0/src/cv/cvcorner.cpp,line 254 
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/buildd/opencv-2.1.0/src/cv/cvcorner.cpp:254: error: (-215) src.type() == CV_8UC1 || src.type() == CV_32FC1 in function cornerEigenValsVecs

Aborted

它编译正确,但是当我尝试运行它时,它给了我这个错误。

代码如下:

IplImage* eig_image = 0;
IplImage* temp_image = 0;

IplImage *img1 = 0;

img1 = cvLoadImage("im1.pgm");
if(img1==0) {
    printf("oh no!");
}

eig_image = cvCreateImage(cvGetSize(img1),IPL_DEPTH_32F, 1);

temp_image = cvCreateImage(cvGetSize(img1),IPL_DEPTH_32F, 1);


const int MAX_CORNERS = 100;
CvPoint2D32f corners[MAX_CORNERS] = {0};
int corner_count = MAX_CORNERS;
double quality_level = 0.1;
double min_distance = 1;
int eig_block_size = 3;
int use_harris = true;
double k  = .4;

cvGoodFeaturesToTrack(img1, eig_image, temp_image,corners,&corner_count,quality_level,min_distance,NULL,eig_block_size,use_harris,k);

为什么会发生这种情况,我该如何解决?感谢您的帮助!

【问题讨论】:

    标签: c++ opencv computer-vision


    【解决方案1】:

    OpenCV 试图告诉您您传递给 cvGoodFeaturesToTrack() 的图像之一(错误实际上源自辅助函数cornerEigenValsVecs())不是所需的类型 CV_8UC1 或 CV_32FC1。

    我怀疑 img1 可能不是您需要的类型。 img1 矩阵的类型是什么?如果它是彩色的,那么它可能是 CV_8UC3 类型。考虑使用cvCvtColor 使其成为灰度图像。

    或者,您也可以最初将图像加载为灰度图像:

    cvLoadImage("im1.pgm", CV_LOAD_IMAGE_GRAYSCALE);
    

    【讨论】:

    • 谢谢!这行得通。这很奇怪,因为我使用的图像是从一个不同的函数中遗留下来的,它被灰度化并保存了。也许我错了,但不管它现在是否有效。
    • 很高兴我能帮上忙!有时图像可能看起来是灰度的,但最终会通过 R = G = B = Intensity 值保存为 RGB 图像。这大概就是发生了什么。保存图像时,请确保它们是 8 位灰度。
    猜你喜欢
    • 2012-09-20
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多