这是另一个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/