它的另一个 OpenCV 问题。我喜欢这些东西,但它真的会让你发疯。
问题:我正在为 iPhone 的 iOS 开发一个项目,是的 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 行,并使用其中的一小部分作为模板。照片包含垂直线,所以我希望确定这些线之间的距离。是的,它令人费解。但是,出于本次讨论的目的,真的应该只有 1 行和一系列列,这些列在每个比较正确移动时输出相关系数?
再次感谢伙计们、伙伴们、小伙子们、小伙子们,以及你们所有聪明的群众!