我想使用概率霍夫变换保存检测到的线条。使用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;
}
答案 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