这是另一个 OpenCV 问题。我喜欢这些东西,但它真的会让你发疯。
问题:我正在 iOS for iPhone 中使用 OpenCV 开发一个项目。我不知道是我的框架不好还是什么。
这个有效:
cv::Canney()
cv::adaptiveThreshold()
但是,当我尝试
"cvGet2D()" (without previous "cv::")
我收到错误:没有匹配函数来调用“cvGet2D”
当我只输入“cvGet2D()”时,它会出现在代码提示中,暗示它至少找到了标题?当我尝试键入“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 行和一系列列,这些列在移动时为每个比较输出相关系数是否正确?
再次感谢伙计们、伙伴们、小伙子们、姑娘们,以及你们这些聪明的群众!
最佳答案
您可能正在使用 OpenCV 2.0 的 C++ API。
函数已移至 cv
命名空间。
您可以将它们与前面的 cv::
一起使用,或者只需将 using namespace cv;
添加到您使用它们的文件的开头即可。
引用:http://www.aishack.in/2010/07/opencvs-c-interface/
编辑:
还要确保所有大写字母都正确:
如果您使用 cv::cvGet2D(img,i,j)
或(如果您包含命名空间)简单地使用 cvGet2D(img,i,j)
,它应该可以编译
关于ios - 没有调用 cvGet2D 的匹配函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10904384/