这是另一个OpenCV问题。我喜欢这个东西,但是它真的可以使你疯狂。

问题:我正在开发适用于iPhone的iOS中带有OpenCV的项目。我不知道我的框架不好还是什么。

这有效:

cv::Canney()
cv::adaptiveThreshold()

但是,当我尝试
"cvGet2D()" (without previous "cv::")

我收到错误消息:没有匹配的函数调用'cvGet2D'

当我只键入“cvGet2D()”时,它会显示在代码提示中,建议至少查找 header ?当我尝试键入“cv::get2D”或“cv::cvGet2D”时,什么都没有显示。我很沮丧,因为我安装的OpenCV框架仍然感觉像一个我不理解的黑盒子。

具体来说,您认为它与开发与否以及链接适当的库有什么关系吗?只是把东西扔在那里。

非常感谢大家。我真的很感激,等不及要变得足够聪明以回馈一些。

编辑:

因此,最近进行的澄清尝试。
 cv::cvGet2D(results,0,0);

新错误是:“命名空间'cv'中没有名为“cvGet2D”的成员;

这里有什么想法吗?

更多编辑:

再次感谢您的回复... 4小时后,再喝上几杯咖啡,我仍然感到困惑。如果我搞砸了命名空间,为什么cv::adaptiveThreshold之类的东西可以工作,但cv::get2D却无法显示?这严重导致大脑流血。

因此,看来我应该使用该解决方案的C或C++版本。建议任何提示。我将在界面中添加#import <OpenCV/opencv2/opencv.hpp>。然后将其导入核心库,在那里我可以看到cvGet2D的结构。再次感谢。

进展!!

这些是我的新想法。
cv::Mat tempMat = [self.imageView.image CVMat];
cv::Mat testMat = tempMat(cv::Rect(0,0,2591, 1));
cv::Mat templateMat = tempMat(cv::Rect(0,0,100,1));

cv::Mat results;


cv::matchTemplate(testMat, templateMat, results, CV_TM_CCOEFF_NORMED);

typedef Vec<float, 2> Vec2f;

Vec2f& elem = results.at<Vec2f>( 0 , 35 );

float value1 = elem[0];
float value2 = elem[1];

因此,也许应该使用.at?切线?也许可以,但是似乎正在做些事情。新问题,wtf是否输出matchTemplate?它的1行,在这种情况下为2492列。我想我的问题是,(0,35)的值是否应该大于一个数字? elem [0]和elem [1]代表什么?如您所知,我只是从一张图片中取出一行,并使用其中的一小部分作为模板。该照片包含垂直线,因此我希望确定两条线之间的距离。是的,它令人费解。但是,出于讨论的目的,实际上应该只有1行,而一系列列会为每个比较输出正确的移位相关系数,因为移位正确了吗?

再次感谢bloks,队友,小伙子,小姑娘和所有聪明人!

最佳答案

您可能正在使用OpenCV 2.0的C++ API。

函数已移至cv命名空间。

您可以在cv::之前使用它们,也可以将using namespace cv;简单地添加到使用它们的文件的开头。

参考:http://www.aishack.in/2010/07/opencvs-c-interface/

编辑:

还要确保所有大写字母正确:

如果使用cv::cvGet2D(img,i,j)或(如果包含 namespace )只是cvGet2D(img,i,j),则应该编译

关于ios - 没有匹配功能可调用cvGet2D,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10904384/

10-11 20:16