使用Mat类型的条件表达式

时间:2013-02-26 01:27:07

标签: opencv

以前,我使用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

还有其他解决方法吗?

3 个答案:

答案 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()那么它会失败