gpt4 book ai didi

c++ - 如何使用 cv::findcontours 和 DFT?它导致调试错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:20 25 4
gpt4 key购买 nike

我正在做的是在预处理图像(通过阈值)后找到图像的轮廓。我想获得每个轮廓的离散傅立叶描述符(使用 dft() 函数)我的代码如下,

vector<Mat> contourLines1;
vector<Mat> contourLines2;

getContourLine(exC1, contourLines1, binThreshold, numOfErosions);
getContourLine(exC2, contourLines2, binThreshold, numOfErosions);

// calculate fourier descriptor
Mat fd1 = makeFD(contourLines1.front());
Mat fd2 = makeFD(contourLines2.front());

/////////////////////////

void getContourLine(Mat& img, vector<Mat>& objList, int thresh, int k){
threshold(img,img,thresh,255,THRESH_BINARY);
erode(img,img,0,cv::Point(-1,-1),k);
cv::findContours(img,objList,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
}

/////////////////////////

Mat makeFD(Mat& contour){
Mat result;
dft(contour,result,DFT_ROWS);
return result;
}

有什么问题???我找不到它..我认为函数的参数类型(例如 cv::finContours 或 dft )是错误的....

最佳答案

findContours 的输出是 vector >。您正在提供 vector 。这是一个合法的使用(虽然有点晦涩),但你必须记住矩阵中的类型元素是'int'。另一方面,DFT 仅适用于浮点矩阵。这就是导致崩溃的原因。您可以使用 convertTo函数创建适当类型的矩阵。

此外,我不确定输出对您正在进行的任何计算是否有任何意义。据我所知,傅立叶变换应该处理信号,而不是处理从信号中提取的坐标。

只是风格上的评论:执行相同阈值的更简洁的方法是

img = (img > thresh);

关于c++ - 如何使用 cv::findcontours 和 DFT?它导致调试错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19887780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com