0

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

有没有其他解决方法?

4

3 回答 3

0

您需要像这样访问 storeImg 的索引

storeImg[i]

如果您希望随后访问存储在索引中的 Mat 元素,您可以调用

storeImg[i].at<float>(j)
于 2013-02-26T04:38:12.663 回答
0

我不确定这一点,但只是经过测试,顺便说一下它可以工作和验证。

if(storeImg[i].data == storeImg[0].data)
于 2013-02-26T08:33:33.030 回答
0

请澄清,你打算什么样的比较。

如果你有vector<IplImage*> storeImg,( storeImg[0]==storeImg[7] )将只比较 POINTERS。

因为vector<Mat> storeImg相同的表达式会尝试比较整个结构,这实际上是非法的。

你想检查一下,内容(像素)是否相等?

那将是:sum( storeImg[0] - storeImg[7] ) == 0

如果您仍想比较指针,( storeImg[0].data == storeImg[7].data )则可能适用于 cv:Mat 情况,但如果您在那里有其他垫子的 clone(),它将失败

于 2013-02-26T10:47:54.950 回答