visual-c++ - 如何使用霍夫变换将行存储保存在矩阵中?

标签 visual-c++ opencv feature-detection

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

我试图将此矩阵保存在 xml 文件中。但是在 project_test.exe 中的 0x75db9617 处出现未处理异常的错误:Microsoft C++ 异常:cv::Exception at memory location 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;

}

最佳答案

它在抛出异常

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

关于visual-c++ - 如何使用霍夫变换将行存储保存在矩阵中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10864602/

相关文章:

c++ - Visual C++ - 将 double 和整数写入二进制文件

c++ - 为什么代码被clang接受而被vc++拒绝?

python - pip 升级cv2

matlab - 在 MATLAB 中,给定数据向量,查找阈值内的零交叉

matlab - 如何在图像中找到局部最大值

qt - MSVC C4100 : 'application' : unreferenced formal parameter warning

c++ - 如何在 Windows 上使用 Visual C++ 强制加载链接库

c++ - 为什么每次RNG的结果都一样?

python - 在python中裁剪视频

python - 将全局特征添加到 SIFT 特征以查找图像相似性