以前,我使用C API,现在我正在迁移到C ++ API opencv。以下是一些没有经历过的事情。它说Mat中的某种条件表达式错误。使用C API一切似乎都很好。
/// Initialize (C API)
vector<IplImage*> storeImg;
storeImg.pushback(...);
if( storeImg.at(i) == storeImg.at(0) )//no error
/// Initialize (C++ API)
vector<Mat> storeImg;
storeImg.pushback(...);
/// To use it
if( storeImg.at(i) == storeImg.at(0) )//error: conditional expression is illegal
还有其他解决方法吗?
答案 0 :(得分:0)
你需要像这样访问storeImg的索引
storeImg[i]
如果您希望访问索引中存储的Mat元素,可以调用
storeImg[i].at<float>(j)
答案 1 :(得分:0)
我不确定这一点,但只是经过测试,它的工作原理和验证方式。
if(storeImg[i].data == storeImg[0].data)
答案 2 :(得分:0)
请澄清,你打算进行什么样的比较。
如果您有vector<IplImage*> storeImg
,( storeImg[0]==storeImg[7] )
只会比较指针。
对于vector<Mat> storeImg
,同一个表达式会尝试比较整个结构,这实际上是非法的。
就像:sum( storeImg[0] - storeImg[7] ) == 0
如果您仍想比较指针,( storeImg[0].data == storeImg[7].data )
可能在cv:Mat案例中有效,但如果你有其他席子的clone()那么它会失败