如何使用Hough变换在矩阵中保存行存储?

时间:2012-06-02 17:49:23

标签: visual-c++ opencv feature-detection

我想使用概率霍夫变换保存检测到的线条。使用houghlines2命令有一个名为line_storage的参数.line_storage是此函数存储其结果的位置。这可以是CvMemoryStorage结构或具有N行的矩阵。在概率霍夫变换模式中,矩阵必须是N行1列,并且4通道(CV_32FC4)。它存储线段的两个端点((x,y)两次)。

我试图将此矩阵保存在xml文件中。但是在project_test.exe中有一个错误是0x75db9617处的未处理异常:Microsoft C ++异常:cv ::内存位置0x001bf0a0的异常。我以前的代码保存矩阵,如下所示。 你能解释一下我做错了什么吗?并且任何人都可以告诉我如何在xml文件中保存此矩阵。

#include "stdafx.h"
#include"cv.h"
#include"highgui\highgui.hpp"
#include<math.h>
#include"cxcore.h"


int main()
 {
IplImage* source=cvLoadImage("image581.jpg");
CvSize imgsize=cvGetSize(source);

IplImage *detected=cvCreateImage(imgsize,8,1);
IplImage* imgBlue=cvCreateImage(imgsize,8,1);
IplImage* imgRed=cvCreateImage(imgsize,8,1);
IplImage* imgGreen=cvCreateImage(imgsize,8,1);


cvSplit(source,imgBlue,imgGreen,imgRed,NULL);

cvAnd(imgBlue,imgGreen,detected);
cvAnd(detected,imgRed,detected);

cvErode(detected,detected);
cvDilate(detected,detected);

cvThreshold(detected,detected,100,250,CV_THRESH_BINARY_INV);

CvMat* lines=cvCreateMat(50,1,CV_32FC4);
cvHoughLines2(detected,lines,CV_HOUGH_PROBABILISTIC,1,CV_PI/180,100,80,5);

cvNamedWindow("Source");
cvNamedWindow("Red");
cvNamedWindow("Final");

    cvShowImage("Source",source);
    cvShowImage("Red",imgRed);
    cvShowImage("Final",detected);

    cvWaitKey(0);

    cvSave("Result-line.xml",lines);

    cvDestroyWindow("Source");
    cvDestroyWindow("Red");
    cvDestroyWindow("Final");
    cvReleaseMat(&lines);


    return 0;

}

1 个答案:

答案 0 :(得分:1)

抛出异常
cvHoughLines2(detected,lines,CV_HOUGH_PROBABILISTIC,1,CV_PI/180,100,80,5);

作为“目标矩阵数据类型不合适”。因为您已为CV_32FC4而不是CV_32SC4创建了矩阵。 请参阅opencv文档的以下链接。

http://opencv.willowgarage.com/documentation/feature_detection.html