1

我需要一些不好的帮助。我发誓我已经寻找了 1 周的时间来寻找这个问题的答案,但没有成功,所以我来爬行寻求帮助。

我的目标很简单。我正在尝试在 Xcode 中使用 OpenCV 库。我有一些令人沮丧的问题。我让 OpenCV 库可以很好地与 cvCanney 和 cvAdaptive Transforms 配合使用,但我无法让它执行 cv::dft()。我首先尝试以下方法:

cv::Mat tempMat = [self.imageView.image CVGrayscaleMat];
cv::dft(tempMat, output2); 

这会出错,因为它的格式不正确(CV_32FC1)。所以我然后尝试:

cv::Mat tempMat = [self.imageView.image CVMat];
cv::cvtColor(tempMat, output2, CV_32FC1); 
cv::dft(output2, output3); 

我得到同样的错误。具体来说,错误内容如下:

Assertion failed (type == CV_32FC1 || type == CV_32FC2 || type == CV_64FC1 || type == CV_64FC2) in dft

作为对原始问题的更新,我一直在尝试使用 cv::type() 确定类型并返回 type= 24。有人可以向我解释如何破译这种类型的含义吗?是不是类型不对?最新尝试:

cv::Mat tempMat = [self.imageView.image CVMat];
cv::Mat output2(tempMat.rows, tempMat.cols, CV_32FC1); 


cv::cvtColor(tempMat, tempMat, CV_32FC1); 


int type = tempMat.type();
int type2 = output2.type(); 

当我运行它时,我得到了 tempMat 的 24 类型和 output2 的 5 类型。如果我尝试添加这个:

cv::cvtColor(output2, output2, CV_32FC1);

我得到错误:Assertion failed (scn == 3 || scn == 4) in cvtColor

有任何想法吗?即使它是 RTFM 的建议,我也会在这一点上采取任何措施。请帮忙。

谢谢你。

4

1 回答 1

0

我认为这是一个可变类型和渠道数量的问题。

cv::Mat tempMat = [self.imageView.image CVMat];
cv::Mat output2;
cv::cvtColor(tempMat,output2, CV_BGR2GRAY);
output2.convertTo(output2, CV_32FC1);
cv::dft(output2, output2); 
output2.convertTo(image, CV_8UC1);

请让我知道这是否可行,我的项目中有类似的代码并试图从中得出答案;因此它可能包含一些错误。我们可以从这里以交互方式完成它。

于 2013-04-02T14:08:30.747 回答